2 回答

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

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
對(duì)于可以*string用作參數(shù)的字符串,您似乎無法更改原始字符串:
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
對(duì)于復(fù)雜的結(jié)構(gòu),通過引用和阻止編輯將更困難或不可能。
如果我弄錯(cuò)了,請(qǐng)糾正我(我只是在學(xué)習(xí) Go)。
- 2 回答
- 0 關(guān)注
- 199 瀏覽
添加回答
舉報(bào)