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

golang中方法定义取舍求老司机指点!

golang中方法定义取舍求老司机指点!

守着星空守着你 2019-10-10 15:52:12
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 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

函数参数
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-10
?
慕斯709654

TA贡献1840条经验 获得超5个赞

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

添加回答

举报

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