1. ホーム
  2. スクリプト・コラム
  3. ゴラン

囲碁言語の基本構造と使用例

2022-01-06 16:29:05

概要

構造体とは、同一または異なる種類のデータの集合体である

構文

構造体を定義する [カスタム構造体の名前を特定し、同じパッケージ内で繰り返すことはできません。

type struct name struct {
  field1: value of field1,
  field2: value of field2,
  ......
}


//Student
type Student struct {
  Name string //name
  Age int //age
  Sex bool //gender true:male false:female
}


構造定義の3つの形態

第一の【基本的なインスタンス化】について

var stu Student


2つ目の【ポインタ型構造体】について

var stu *Student = new(Student)


3つ目は、[&操作で、構造体のアドレスを取って、インスタンス化する]です。

var stu *Student = &Student{}


構造体を初期化する

キー・バリュー・ペア初期化構造

で区切られたキー値、.で区切られたキーバリューペア。

変数名 := 構造体の型名 {.
    フィールド1 field1 の値。
    フィールド 2:フィールド 2 の値。
    ......
}

stu3 := Student{
  Name: "李四",
  Age: 18}


値リストが構造体を埋める

順番に、すべてのフィールドが入力されている必要はありません。

変数名 := 構造体型の名前 {.
    フィールド 1 の値です。
    フィールド 2 の値です。
    ......
}

stu4 := Student{
  "王五",
  18,
  true,
}


匿名構造体

値を代入しながら構造を定義する

変数名 := struct{
    field1: フィールドタイプ1。
    フィールド2:フィールドタイプ2。
    ......
}{
    // フィールド値の初期化
    フィールド1:フィールド1の値。
    フィールド 2: フィールド 2 の値。
    ......
}

stu5 := struct {
  Name string
  Age int
}{
  Name: "王五",
  Age: 18,
}


構造体メンバへのアクセス

割り当て、アクセスはすべて"で行います。 "はこの記号をドットで囲みます。

<ブロッククオート

構造体です。フィールド

var stu Student
stu.Name="Zhang San" //assign a value
stu.Age=18
stu.Sex=true

fmt.Println(stu.Age) //access


関数の引数としての構造体

func function name([struct variable, struct pointer variable]){}


func printStudent(stu Student) {}
func printStudent(stu *Student) {}


 構造体へのポインタ

構造体ポインターを使用して、構造体メンバーにアクセスするには、"." 演算子を使用します。

var variable name * structure name


var stu1 *Student = new(Student)
stu1.Name = "李四"
stu1.Age = 20
stu1.Sex = false


構造体メソッドの追加

構造体にメソッドを追加し、funcとメソッド名の間に括弧を入れ、構造体へのポインタ参照を追加します[値の参照も可能]...。

func ([struct name]) method name ([argument list]) [return value list] {}


var stu Student
stu.Name = "Zhang San"
stu.Age = 18
stu.Sex = false

// Call
stu.sayHi()

//add structure method
func (stu Student) sayHi() {
	fmt.Println(stu.Name, "Hi")
}


概要

golangは非オブジェクト指向言語なので、goの構造はjavaのクラスに似ていると言えますが、明らかに継承ポリモーフィズムのようなOO機能はありません。

ポインタ変数が構造体メンバにアクセスするには、.NET Frameworkを使用します。構造体のメンバへのアクセスは、CやC++であれば*を介して行わなければならないが、これはGoの最適化である。

package main
import "fmt"
// Define struct [identify the name of the custom struct, which cannot be repeated within the same package]
type Student struct {
	Name string
	Age int
	Sex bool
sex bool }
func main() {
	//Three forms of struct definition
	var stu Student
	stu.Name = "Zhang San"
	stu.Age = 18
	Stu.Sex = false
	fmt.Println(stu)
	var stu1 *Student = new(Student)
	stu1.Name = "李四"
	stu1.Age = 20
	stu1.Sex = false
	fmt.Println(stu1)
	var stu2 *Student = &Student{}
	stu2.Name = "Wang Wu"
	stu2.Age = 55
	stu2.Sex = true
	fmt.Println(stu2)
	//initialize the structure
	stu3 := Student{
		Name: "李四",
		Age: 18}
	fmt.Println(stu3)
	stu4 := Student{
		"Wang Wu",
		18,
		true,
	}
	fmt.Println(stu4)
	//anonymous struct
	stu5 := struct {
		Name string
		Age int
	}{
		Name: "王五",
		Age: 18,
	}
	fmt.Println(stu5)
	// printStudent(stu)
	printStudent(stu1)
	stu.sayHi()
}
// add struct method
func (stu Student) sayHi() {
	fmt.Println(stu.Name, "Hi")
}
// func printStudent(stu Student) {
// fmt.Println(stu.Name, stu.Age, stu.Sex)
// }
func printStudent(stu *Student) {
	fmt.Println(stu.Name, stu.Age, stu.Sex)
}


以上、Go言語の基本構造の使い方と例について詳しく説明しました。