golangで値を変更する方法

PHPz
リリース: 2023-04-13 18:41:16
オリジナル
1003 人が閲覧しました

Golang は非常に人気のあるプログラミング言語であり、そのシンプルな構文、高いパフォーマンス、同時実行機能により、Web アプリケーション、ネットワーク プログラミング、その他の分野で広く使用されています。 Goでは変数の値を変更するのがわかりにくいかもしれませんが、この記事ではGoでの値の変更方法を詳しく紹介します。

1. 値渡しと参照渡し

Golang では、関数パラメーターは値渡しまたは参照渡しできます。値による受け渡しとは、パラメーター値のコピーを関数に送信することを意味します。関数内でパラメーター値を変更しても、関数外の値には影響しません。参照渡しとは、パラメーターを関数へのポインターとして渡すことを指し、関数内のポインターへの変更は関数の外部に反映されます。

サンプル コードは次のとおりです。

package main

import "fmt"

func main() {
    var x int = 10
    fmt.Println("before call:", x)
    modifyValue(x)
    fmt.Println("after call:", x)
    modifyPointer(&x)
    fmt.Println("after call:", x)
}

func modifyValue(x int) {
    x = x + 1
    fmt.Println("in func:", x)
}

func modifyPointer(x *int) {
    *x = *x + 1
    fmt.Println("in func:", *x)
}
ログイン後にコピー

このコードは、2 つの関数 modifyValuemodifyPointer を定義します。1 つは値の変更用、もう 1 つは変更用です。ポインター。 main 関数では、整数変数 x を定義して 10 に初期化し、それぞれ modifyValuemodifyPointer を呼び出します。

このプログラムを実行すると、出力結果は次のようになります。

before call: 10
in func: 11
after call: 10
in func: 11
after call: 11
ログイン後にコピー

出力を観察すると、modifyValue が呼び出されたときに、パラメータが関数内で変更された場合、関数の外の値は変更されません。modifyPointer が呼び出されると、関数内ではポインタが指す値が 1 増加し、関数外の値は 1 増加します。それに応じて も 11 になります。これは、値による受け渡しと参照による受け渡しの違いです。

2. Golang で値を変更する方法

値の受け渡しと参照の受け渡しの違いを理解した後、Golang で値を変更する方法を紹介し始めることができます。

2.1 配列とスライス

Golang では、インデックスを介して配列とスライスの要素にアクセスでき、インデックスを介して要素の値を変更できます。

サンプル コードは次のとおりです。

package main

import "fmt"

func main() {
    var arr [3]int = [3]int{1, 2, 3}
    fmt.Println("before modify:", arr)
    arr[1] = 4
    fmt.Println("after modify:", arr)
    
    var slc []int = []int {1, 2, 3}
    fmt.Println("before modify:", slc)
    slc[1] = 4
    fmt.Println("after modify:", slc)
}
ログイン後にコピー

このコードは、長さ 3arr の整数配列と整数スライス slc を定義します。配列の 2 番目の要素とスライスを順番に並べます。

このプログラムを実行すると、出力結果は次のようになります。

before modify: [1 2 3]
after modify: [1 4 3]
before modify: [1 2 3]
after modify: [1 4 3]
ログイン後にコピー

2.2 Map

Golang では、Map はキーと値のペアの構造であり、マッピングできます。キー名で値にアクセスし、値を変更します。

サンプル コードは次のとおりです。

package main

import "fmt"

func main() {
    var m map[string]int = map[string]int{"apple": 1, "banana": 2, "orange": 3}
    fmt.Println("before modify:", m)
    m["banana"] = 4
    fmt.Println("after modify:", m)
}
ログイン後にコピー

このコードは、文字列から整数へのマップを定義し、キー名を通じてマップ内の値を変更します。

このプログラムを実行すると、出力結果は次のようになります。

before modify: map[apple:1 banana:2 orange:3]
after modify: map[apple:1 banana:4 orange:3]
ログイン後にコピー

2.3 Struct

Golang では、構造体はユーザー定義の複合型であり、構造体本体のメンバーと、ドット構文を使用して構造体メンバーの値にアクセスして変更します。

サンプル コードは次のとおりです。

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func main() {
    var p Person = Person{"Tom", 20}
    fmt.Println("before modify:", p)
    p.Age = 21
    fmt.Println("after modify:", p)
}
ログイン後にコピー

このコードは、文字列型メンバー Name と、整数型メンバ Age を使用し、次に p という名前の構造体変数を定義して初期値を割り当て、最後に構造体メンバの値を変更します。 このプログラムを実行すると、出力結果は次のようになります:

before modify: {Tom 20}
after modify: {Tom 21}
ログイン後にコピー

3. まとめ

Golang の変数は、基本型と複合型に分類できます。基本型は直接変更できませんが、複合型の値はインデックス、キー名、ドット構文を通じて変更できます。 Golang では、パラメータの受け渡しには値の受け渡しと参照の受け渡しの 2 つの方法がありますが、実際のニーズに基づいてどちらの方法を使用するかを決定する必要があります。値の転送の場合、関数外の値を直接変更することはできず、ポインタを渡すことで実現する必要があります。

以上がgolangで値を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート