2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
堆棧幾乎總是比堆快。在哪里定義變量更多的是關(guān)于范圍。由于 Go 是后一個(gè)示例中的詞法范圍語言,因此您弄臟了全局命名空間,使 var buf 在程序中的任何地方都可見。這是語義差異。所以你最好在語義上做正確的事情。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您不想在堆棧中重新分配另一個(gè)大對(duì)象,您應(yīng)該使用指針而不是全局變量。至于 go1.4,這段代碼有效:
package main
import "fmt"
func do(v *[3]int) {
v[1] = 99
}
func main() {
var r [3]int
do(&r)
fmt.Println(r)
//Prints [0 99 0]
}
如果你不使用指針,這將失敗,因?yàn)閿?shù)組作為值傳遞,而不是引用:
package main
import "fmt"
func do(v [3]int) {
v[1] = 99
}
func main() {
var r [3]int
do(r)
fmt.Println(r)
//Prints [0 0 0]
}
注意:這不適用于切片;切片總是作為參考傳遞。
- 2 回答
- 0 關(guān)注
- 181 瀏覽
添加回答
舉報(bào)