Golang New 关键字的小bug 未找到原因(暂时)

Posted evildoerone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang New 关键字的小bug 未找到原因(暂时)相关的知识,希望对你有一定的参考价值。

在使用new关键字对res 进行初始化不会出现SendXml方法中的xml.unmashal方法不成功现象, 而如果使用new关键字的分解动作对res先取零值结构体 然后取地址后,就会出现xml.unmashal不成功(無报错),初始估计是xml.unmashal对interface的地址操作出现误差,但是具体情况未知

func PostapiRequest(req interface{}) (res interface{}, response api.ExtensionResponse) {
body, err := xml.Marshal(req)
if err != nil {
log.Println("create byte xml err---->", err)
return
}

switch req.(type) {
case hotelSearchWithRooms.HotelSearchWithRoomsReq:
res = new(hotelSearchWithRooms.HotelSearchWithRoomsRes)
case hotelDetails.HotelDetailsReq:
res = new(hotelDetails.HotelDetailsRes)
case hotelCancellationPolicy.HotelCancelPolicyReq:
res = new(hotelCancellationPolicy.HotelCancelPolicyRes)
case countryList.CountryListReq:
res = new(countryList.CountryListRes)
case cityList.CityListReq:
res =new(cityList.CityListRes)
}

fmt.Println(string(body))
fmt.Println(reflect.TypeOf(req))
response.TimeNow = time.Now()

code, message, data := api.HttpClient.SendXml(api.APIurl, body, api.Heads, 0, res)

response.Code = code
response.Message = message
response.UrlLog = api.APIurl
response.BodyLog = utils.Bytes2String(body)
response.DataLog = utils.Bytes2String(data)
response.Err = err
if code != commobj.SUCCESS {
log.Println(message)
} else {
fmt.Printf("%+v\n", res)

}

return
}
暂时记录下来方便下次查找,目前建议尽量使用new关键字进行初始化

以上是关于Golang New 关键字的小bug 未找到原因(暂时)的主要内容,如果未能解决你的问题,请参考以下文章

text 故事:lijian将提交他在golang的数学中找到的'bug'。实现...

Golang | new和make方法的区别

oracle添加记录的时候提示违反完整性约束,未找到父项关键字怎么解决

记录一次并发测试的bug

ORA-02291: 违反完整约束条件 (*) - 未找到父项关键字

golang的内存模型与new()与make()