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

golang中这两种方法的如何取舍选择,之间有什么区别functest(&post)error{}和functest()(postPost,errerror){}
学习golang期间看到有些内部方法是通过形参形式给参数赋值的,比如json.Unmarshal定义为
funcUnmarshal(data[]byte,vinterface{})error{
//Checkforwell-formedness.
//Avoidsfillingouthalfadatastructure
//beforediscoveringaJSONsyntaxerror.
varddecodeState
err:=checkValid(data,&d.scan)
iferr!=nil{
returnerr
}
d.init(data)
returnd.unmarshal(v)
}
为何不定义成如下这种方式
funcUnmarshal(data[]byte)(vinterface,errerror){
……
}
守着星空守着你
浏览 391回答 2
2回答

幕布斯7119047

函数参数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

传指针可以直接修改变量,用返回值的还有多一个拷贝。Unmarshal实际也是需要一个指针,然后可以写进变量里。用返回值就还得拷贝。但是golang想表示任意类型的指针,只能interface{}了....
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript