English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎トレーニング

Golang 制御文

Golang ファンクション & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang エラ

Golang その他の雑多

Go言語の構造体とポインタ

ポインタを指すこともできますstructのポインタ。Golangのstruct(構造体)は、ユーザー定義のタイプであり、異なるタイプのプロジェクトをグループ化することができます/単一のタイプに組み合わせます。構造体へのポインタを使用するには、以下を使用します&演算子、すなわちアドレス演算子。Golangは、プログラマーが構造体のフィールドにアクセスする際に明示的にアンダースコアを使用することなく、ポインタを使用することが許可しています。

例1:ここでは、Employeeという名前の構造体を作成し、main関数で構造体のインスタンス、つまりempを作成します。その後、構造体のアドレスを構造体概念を表すポインタに渡すことができます。明示的にアンダースコアを使用する必要はありません。なぜなら、以下のプログラムと同じ結果が得られるからです(ABCが2回)。

package main
import "fmt"
//構造体の定義
type Employee struct {
    //フィールドを設定
    name string
    empid int
}
func main() {
    //作成されたインスタンス
    //従業員構造体型
    emp := Employee{"ABC", 19078}
    //ここでは、構造体へのポインタを指している
    pts := &emp
    fmt.Println(pts)
    //構造体のフィールドにアクセス(従業員の名前)
    //ポインタを使用して、明示的なアンダースコアを使用していない場合
    fmt.Println(pts.name)
    //明示的にアンダースコアを使用して
    //上記の結果と同じ
    fmt.Println(*pts).name)
}

出力:

&{ABC 19078}
ABC
ABC

例2:以下のように、構造体メンバーまたは構造体リテラルの値を変更する場合、ポインタを使用できます:

package main
import "fmt"
//構造体の定義
type Employee struct {
    name string
    empid int
}
func main() {
    //作成されたインスタンス
    //従業員構造体型
    emp := Employee{"ABC", 19078}
    //ここでは、構造体へのポインタを指している
    pts := &emp
    //値を表示
    fmt.Println(pts)
    //nameの値を更新
    pts.name = "XYZ"
    fmt.Println(pts)
}

出力:

&{ABC 19078}
&{XYZ 19078}