Go では、関数のパラメーターを渡すには 3 つの方法があります。値渡し (値またはコピー)、参照渡し (ポインター)、不変参照渡し (構造体/配列参照、変更不可能なオブジェクト) です。値によって渡される場合、関数は値のコピーを操作し、元の値には影響しません。参照によって渡される場合、関数は元の値を変更できます。不変の参照によって渡される場合、関数はフィールドのフィールドに対して操作できます。オブジェクトですが、オブジェクト自体は変更されません。これら 3 つのメソッドは、さまざまなシナリオに適しています。たとえば、値による受け渡しは読み取り専用操作に適しており、参照による受け渡しは変更操作に適しており、不変参照による受け渡しは構造体/配列のフィールドの操作に適しています。
#Go 関数パラメータ受け渡しメカニズム
Go 言語では、関数パラメータは主に 3 つの方法で渡されます。値渡し
パラメータを値渡しすると、パラメータ値のコピーが渡されます。この値を変更すると、元の値ではなく、関数内のコピーにのみ影響します。func modifyValue(num int) { num *= 2 } func main() { x := 10 modifyValue(x) fmt.Println(x) // 输出:10 }
参照渡し
関数が渡された値を変更できるようにする場合は、ポインター参照渡しを使用できます。これは、* プレフィックスを使用してポインター パラメーターを宣言することで実現されます。
func modifyReference(num *int) { *num *= 2 } func main() { x := 10 modifyReference(&x) fmt.Println(x) // 输出:20 }
不変参照による受け渡し
構造体と配列は、不変参照を渡すことで受け渡すことができます。これにより、関数は構造体または配列のフィールドにアクセスできますが、オブジェクト自体は変更できません。type Point struct { x int y int } func modifyPoint(p Point) { p.x *= 2 } func main() { point := Point{10, 20} modifyPoint(point) fmt.Println(point) // 输出:{20 20} }
実際的なケース
関数calculateTotalCost があるとします。その関数は、アイテムのリストを指定して合計コストを計算することです。
import "fmt" type Item struct { name string price float64 } func calculateTotalCost(items []Item) float64 { total := 0.0 for _, item := range items { total += item.price } return total } func main() { items := []Item{ {"Item 1", 10.00}, {"Item 2", 20.00}, {"Item 3", 30.00}, } totalCost := calculateTotalCost(items) fmt.Println(totalCost) // 输出:60.00 }この場合、
items は値によるスライスとして渡されます。これは、関数が元のスライスを変更せずに
items 変数のコピーを受け取ることを意味します。
以上がGolang 関数のパラメータはどのように渡されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。