golang中这两种方法的如何取舍选择,之间有什么区别func test(&post) error{}
和func test() (post Post, err error){}
学习golang期间看到有些内部方法是通过形参形式给参数赋值的,比如json.Unmarshal定义为
func Unmarshal(data []byte, v interface{}) error {
// Check for well-formedness.
// Avoids filling out half a data structure
// before discovering a JSON syntax error.
var d decodeState
err := checkValid(data, &d.scan)
if err != nil {
return err
}
d.init(data)
return d.unmarshal(v)
}
为何不定义成如下这种方式
func Unmarshal(data []byte) (v interface, err error){
……
}
函数参数
func test(&post) error
给与了一个具体的对象,通常用于需改等操作,例如func UpdatePostInfo(&post) error
func test() (post Post, err error)
没有给与具体的对象,通常用于new,例如func NewPostInfo() (post Post, err error)
请问v是什么类型?
func Unmarshal(data []byte) (v interface, err error)
json.Unmarshal传入的对象具有类型信息,例如实际的map和struct类型,才能根据需要反序列化的对象的全部属性来设置json的值,如果不传入类型信息,那么json库不知道该如何存储json信息。