其他分享
首页 > 其他分享> > golang 对&与new的一点小区别的理解

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