2 回答

TA貢獻2019條經驗 獲得超9個贊
Go 中沒有直接的等價物。
如果對象很大(大于 32-64 字節)和/或需要更改,則通過指針傳遞。
如果上述規則不適用,則按值傳遞。
映射/通道/切片是引用類型,它們包含內部指針,因此您不需要通過指針傳遞它們,除非您計劃可能傳遞 nil 或想要附加(不修改已包含的元素)到切片。
例子:
func doMap(m *map[string]string) {
if *m == nil {
*m = map[string]string{}
}
.....
}

TA貢獻1789條經驗 獲得超10個贊
對于可以*string用作參數的字符串,您似乎無法更改原始字符串:
package main
import (
"fmt"
)
func t1(s *string) {
fmt.Println("Inside before: %s", *s)
s2 := "tEsT1"
s = &s2
fmt.Println("Inside after 1: %s", *s)
}
func main() {
var s = "test"
fmt.Println("Ourside before: %v", s)
t1(&s)
fmt.Println("Ourside after: %v", s)
}
印刷:
Ourside before: %v test
Inside before: %s test
Inside after 1: %s tEsT1
Ourside after: %v test
對于復雜的結構,通過引用和阻止編輯將更困難或不可能。
如果我弄錯了,請糾正我(我只是在學習 Go)。
- 2 回答
- 0 關注
- 195 瀏覽
添加回答
舉報