为了账号安全,请及时绑定邮箱和手机立即绑定

求大佬指点哈!golang中方法定义取舍

求大佬指点哈!golang中方法定义取舍

慕码人2483693 2019-10-16 10:12:07
golang中这两种方法的如何取舍选择,之间有什么区别functest(&post)error{}和functest()(postPost,errerror){}学习golang期间看到有些内部方法是通过形参形式给参数赋值的,比如json.Unmarshal定义为funcUnmarshal(data[]byte,vinterface{})error{//Checkforwell-formedness.//Avoidsfillingouthalfadatastructure//beforediscoveringaJSONsyntaxerror.varddecodeStateerr:=checkValid(data,&d.scan)iferr!=nil{returnerr}d.init(data)returnd.unmarshal(v)}为何不定义成如下这种方式funcUnmarshal(data[]byte)(vinterface,errerror){……}
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

函数参数
functest(&post)error给与了一个具体的对象,通常用于需改等操作,例如funcUpdatePostInfo(&post)error
functest()(postPost,errerror)没有给与具体的对象,通常用于new,例如funcNewPostInfo()(postPost,errerror)
请问v是什么类型?
funcUnmarshal(data[]byte)(vinterface,errerror)
json.Unmarshal传入的对象具有类型信息,例如实际的map和struct类型,才能根据需要反序列化的对象的全部属性来设置json的值,如果不传入类型信息,那么json库不知道该如何存储json信息。
                            
查看完整回答
反对 回复 2019-10-16
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

传指针可以直接修改变量,用返回值的还有多一个拷贝。
Unmarshal实际也是需要一个指针,然后可以写进变量里。用返回值就还得拷贝。
但是golang想表示任意类型的指针,只能interface{}了....
                            
查看完整回答
反对 回复 2019-10-16
  • 2 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信