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

新手上路,golang中方法定义取舍

新手上路,golang中方法定义取舍

绝地无双 2019-10-25 21:36:19
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 回答

?
侃侃无极

TA贡献2051条经验 获得超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-25
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号