ホームページ >バックエンド開発 >Golang >Golang 関数のパラメータはどのように渡されますか?

Golang 関数のパラメータはどのように渡されますか?

PHPz
PHPzオリジナル
2024-04-12 08:54:01739ブラウズ

Go では、関数のパラメーターを渡すには 3 つの方法があります。値渡し (値またはコピー)、参照渡し (ポインター)、不変参照渡し (構造体/配列参照、変更不可能なオブジェクト) です。値によって渡される場合、関数は値のコピーを操作し、元の値には影響しません。参照によって渡される場合、関数は元の値を変更できます。不変の参照によって渡される場合、関数はフィールドのフィールドに対して操作できます。オブジェクトですが、オブジェクト自体は変更されません。これら 3 つのメソッドは、さまざまなシナリオに適しています。たとえば、値による受け渡しは読み取り専用操作に適しており、参照による受け渡しは変更操作に適しており、不変参照による受け渡しは構造体/配列のフィールドの操作に適しています。

Golang 関数のパラメータはどのように渡されますか?

#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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。