ほとんどの言語(C++など)で渡す配列は暗黙的に参照渡しになるため、関数内の渡された配列を変更すると元のものに変更されます。私はGolangとAlan A.Aの "The Go Programming Language"という本を学んでいます。 DonovanとBrian W. Kernighanそれは、その振る舞いが他の言語とは異なると言われています - 暗黙のうちに配列を参照渡しに渡すわけではありません。Golangが配列を関数に渡してそれを変更する
私はちょっと混乱しています。つまり、参照なしで配列を渡しても配列自体は変更されないはずですか?私はそれを説明してみましょう:配列上記のコードで
func main() {
tab := []int{1, 2, 3}
fmt.Println(tab)
// Results in [1 2 3]
reverse(tab)
fmt.Println(tab)
// Results in [3 2 1]
}
func reverse(tab []int) {
for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
tab[i], tab[j] = tab[j], tab[i]
}
}
は参照によって渡されていないが、逆関数は、元の1を修正するので、それはややだろうC++プログラムのように動作します。誰でも私にその違いを説明できますか?
PS:申し訳ありませんがダミー質問ですが、私はGolangに全く新しく、基本をよく理解しようとしています。
あなたは(https://golang.org/doc/effective_go.html#slices)、[ "ツアー[「有効ゴー」のスライスセクション]のように、ドキュメントのいずれかを介して行っています(https://tour.golang.org/moretypes/7)、[スライスの仕様](https://golang.org/ref/spec#Slice_types)、または[Go blogスライスについての投稿](https://blog.golang.org/go-slices-usage-and-internals)? – JimB