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)errorfunctest()(postPost,errerror)没有给与具体的对象,通常用于new,例如funcNewPostInfo()(postPost,errerror)请问v是什么类型?funcUnmarshal(data[]byte)(vinterface,errerror)json.Unmarshal传入的对象具有类型信息,例如实际的map和struct类型,才能根据需要反序列化的对象的全部属性来设置json的值,如果不传入类型信息,那么json库不知道该如何存储json信息。
慕斯709654
TA贡献1840条经验 获得超5个赞
传指针可以直接修改变量,用返回值的还有多一个拷贝。Unmarshal实际也是需要一个指针,然后可以写进变量里。用返回值就还得拷贝。但是golang想表示任意类型的指针,只能interface{}了....
添加回答
举报
0/150
提交
取消