Go ライブラリ ソースでは、次のように新しいスライス ストレージ参照を作成することでスライスが渡されることがよくあります。
method(s[:])
元のスライスを渡すだけと比べて、これにはどのような利点がありますか?
method(s)
Go ライブラリ ソースでは、次のように新しいスライス ストレージ参照を作成することでスライスが渡されることがよくあります。
method(s[:])
元のスライスを渡すだけと比べて、これにはどのような利点がありますか?
method(s)
このs[:]
構文は通常、「元のスライスを渡す」ためではなく、既存の配列を参照する新しいスライスを作成するためにのみ使用されます。
s[:]
が実際に stdlib のどこかで使用されていてs
、リファクタリングの残り物などよりもスライスである場合。Go issue trackerで知っている場合は、そのような場所を報告してください。
このようなコードが表示される唯一のケースは、s が配列であり、スライスを入力として受け取る関数にパラメーターとして渡したい場合です。次のコードを取ります。
package main
func main() {
x := [...]int{1, 2, 3, 4, 5}
someFunction(x) // type mismatch error : expecting [] int, passed [5] int
someFunction(x[:])// no error
}
func someFunction(input []int){
// use input
}
ここで注意すべきことは、[] int と [5] int はまったく異なる型であるということです。