wan*_*alm 5 pass-by-reference go
我正在调用一个函数来做一个http请求,两个通过引用参数用于该函数.我将[]字节传递给v接口.我希望该函数更新v接口参考值.响应体是一个字符串,我想将字符串值传递给v接口.然而,尝试了许多方法,但没有成功.
下面是代码,你可以看到我宣布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
}
Run Code Online (Sandbox Code Playgroud)
嗯,这不起作用的主要原因是因为你想到了"通过参考调用"这个Go完全不为人知的概念.绝对一切都是通过Go中的值来调用的,一旦你拼出什么是字节切片,指向字节切片的指针,指向接口内部的字节切片的指针,指向从接口提取的字节切片的指针的副本,等等,您将看到如何更新指向字节切片的指针指向的值:
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)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5198 次 |
最近记录: |