golang 对&与new的一点小区别的理解
作者:互联网
func (h *http) Get(r *ghttp.Request, url string, data interface{}) (resp *define.RespService, err error) {
var dataMap = make(map[string]string)
if data != nil {
dataMap = gconv.MapStrStr(data)
}
var queryString string
if len(dataMap) > 1 {
for key, value := range dataMap {
tmpQueryString := key + "=" + value + "&"
queryString = queryString + tmpQueryString
}
}
var qs string
if len(queryString) > 0 {
qs = queryString[:len(queryString)-1]
}
g.Log().Info(reflect.TypeOf(resp))
url = url + "?" + qs
res, err := g.Client().Get(url)
if err != nil {
return nil, err
}
defer res.Close()
content := res.ReadAll()
g.Log().Info("post请求链接地址url:", url)
g.Log().Info("post请求参数:", data)
g.Log().Info("post请求返回内容:", content)
result := gconv.Map(content)
fmt.Printf("%T\n",resp)
//该处&resp的一点理解,&对resp类型进行初始化(不一定都是各类型的零值),并返回指向该对象的指针
//&与new的区别,new会初始化零值,&可以预设自己的值,其他可以是零值
//注意返回的执行该实体的指针跟该实体是不一样的
if err := gconv.Struct(content, &resp); err != nil {
g.Log().Info(11,err)
}
g.Log().Info(1111,resp)
if err := gconv.Struct(result, &resp); err != nil {
g.Log().Info(222,err)
}
g.Log().Info(2222,resp)
return resp, err
}
标签:Info,Log,err,url,resp,queryString,golang,小区,new 来源: https://blog.csdn.net/lengyue1084/article/details/114162858