gpt4 book ai didi

Golang update pass by reference 值

转载 作者:IT王子 更新时间:2023-10-29 01:24:42 25 4
gpt4 key购买 nike

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

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

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
}

最佳答案

嗯,这不起作用的主要原因是因为您想到了“通过引用调用”,这是 Go 完全不知道的概念。在 Go 中,绝对一切都是按值调用的,一旦你拼出了什么是字节 slice 、指向字节 slice 的指针、指向包装在接口(interface)中的字节 slice 的指针、指向从接口(interface)中提取的字节 slice 的指针的副本,依此类推,您将看到如何更新指向字节 slice 的指针指向的值:

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)
}

关于Golang update pass by reference 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com