首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang update by reference值

Golang update by reference值
EN

Stack Overflow用户
提问于 2015-02-20 18:07:23
回答 1查看 6.3K关注 0票数 6

我正在调用一个函数来做一个http请求,该函数使用了两个按引用传递的参数。我将[]字节传递给v接口。我想让函数更新v接口引用的值。响应体是一个字符串,我希望将字符串值传递给v接口。然而,我尝试了很多方法,但都没有成功。

下面是代码,您可以看到我将byts声明为v.(*[]byte),以便使用响应体的字符串值更新v。但它不起作用。v始终为nil。请建议任何方法,使v可以用字符串值更新。

代码语言:javascript
复制
func (s *BackendConfiguration) Do(req *http.Request, v interface{}) error {
    res, err := s.HTTPClient.Do(req)
    defer res.Body.Close()
    resBody, err := ioutil.ReadAll(res.Body)

    if v != nil {   
            byts, ok := v.(*[]byte)
            if len(resBody) > 0 {           
                byts = append(byts, resBody...)
                return nil
            }
        }
    }

    return nil
}
EN

回答 1

Stack Overflow用户

发布于 2015-02-20 19:19:30

嗯,这不起作用的主要原因是你想到了“按引用调用”,这是一个完全未知的概念。在Go中,所有东西都是通过值调用的,一旦你拼写出什么是字节切片,一个指向字节切片的指针,一个封装在接口内的字节切片的指针,一个从接口中提取的字节切片的指针副本,等等,你就会看到如何更新字节切片的指针指向的值:

代码语言:javascript
复制
package main
import "fmt"
func f(v interface{}) {
    pbs := v.(*[]byte)
    *pbs = append(*pbs, []byte{9,8,7}...)
}
func main() {
    bs := []byte{1,2,3}
    pbs := &bs
    var v interface{} = pbs
    f(v)
    fmt.Printf("%v\n", *pbs)
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28626312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档