我對 golang 和一般編譯語言都很陌生,所以請原諒我的無知。在一些這樣的代碼中:package mainimport "fmt"func assign() int { return 1}func reference(foo *int) int { *foo = 2 return 0}func main() { var a, b int a = assign() reference(&b) fmt.Println(a) fmt.Println(b)}...將值分配給 a 與通過引用傳遞 b 之間的實際區別是什么?就實際代碼而言,為什么 json.Unmarshal() 要求您將指針傳遞給空變量,而不是僅返回 Unmarshalled 值以便將其分配給變量?
1 回答

米脂
TA貢獻1836條經驗 獲得超3個贊
按值傳遞需要復制參數,但是在引用的情況下,您只需將指針發送到對象。Golang 默認通過值傳遞,包括切片。
對于json.Unmarshal的具體問題,我相信原因是Unmarshal代碼可以驗證傳入的對象是否包含與json中找到的兼容類型的相同字段名稱。例如,如果 json 有一個重復的字段,則我們要解組的對象中需要有一個對應的切片。
因此,我們需要傳入我們希望將 json 字符串解組到的結構。它需要是一個指針,以便 Unmarshal 可以填充字段。如果你只是傳遞一個通用接口,Unmarshal 將返回一個映射。如果 Unmarshal 不采用指向結構/接口的指針,它可以實現為始終返回映射,但我認為這種方式更有用。
這是一個簡單的例子,但可能有用 - https://play.golang.org/p/-n8euepSS0
- 1 回答
- 0 關注
- 213 瀏覽
添加回答
舉報
0/150
提交
取消