亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

變量賦值和引用傳遞有什么區別?

變量賦值和引用傳遞有什么區別?

Go
慕容708150 2022-03-03 15:06:01
我對 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


查看完整回答
反對 回復 2022-03-03
  • 1 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號