Go言語の構造とメソッドを詳しく解説

リリース: 2020-06-19 17:44:19
転載
3562 人が閲覧しました

Go言語の構造とメソッドを詳しく解説

構造体は、複雑なデータ構造を定義し、多くの同一のフィールド属性を格納するために使用されます

1、構造体定義とシンプルで実用的です

package main

import (
    "fmt"
)

func main() {
    type Student struct { //定义结构体
        name string
        age  int
    }
    s1 := new(Student) // 定义指向结构体的指针
    s1.name = "xiaomu"
    s1.age = 10
    fmt.Printf("name:%s\nage:%d\n", s1.name, s1.age)
}
ログイン後にコピー

3 つあります。たとえば、上記の Student 型は次のように定義されます

①var s1 Student メモリ上に構造体変数を直接定義します

②s1 := new( Student) Defineメモリ内の構造体へのポインタ

③s1 := &Student{}同上

次の方法で格納された値を取得します

①s1。 name

②s1.name または (*s1).name

③ 同上

2. struct 内の「コンストラクタ」を It と呼びます。工場出荷時のモードです。コード

package main

import (
    "fmt"
)

type Student struct { //声明结构体
    Name string
    Age  int
}

func NewStudent(name string, age int) *Student { // 返回值指向Student结构体的指针
    return &Student{
        Name: name,
        Age:  age,
    }
}

func main() {
    s1 := NewStudent("xiaomu", 123) // 声明并且赋值指向Student结构体的指针
    fmt.Printf("name: %s\nage: %d", s1.Name, s1.Age)
}
ログイン後にコピー

3 を参照してください。特に注意事項が記載されています。 ! !

構造体は値型であり、メモリを割り当てるには new を使用する必要があります

4.匿名フィールドについては、次のコードを直接確認してください

package main

import (
    "fmt"
)

func main() {
    type Class struct {
        ClassName string
    }
    type Student struct { //定义结构体
        name  string
        age   int
        Class // 定义匿名字段,继承了该结构体的所有字段
    }
    s1 := new(Student) // 定义指向结构体的指针
    s1.ClassName = "xiaomu"
    fmt.Printf("ClassName:%s\n", s1.ClassName)
}
ログイン後にコピー

struct method

1. struct でメソッドを定義し、

package main

import (
    "fmt"
)

type Student struct { //定义结构体
    name string
    age  int
}

func (stu *Student) OutName() { // 定义Student方法
    fmt.Println(stu.name)
}

func main() {
    s1 := new(Student) // 定义指向结构体的指针
    s1.name = "xaiomu"
    s1.OutName()
}
ログイン後にコピー

2. 構造体は構造体を継承し、継承された構造体のすべてのメソッドは継承された構造体

package main

import (
    "fmt"
)

type ClassName struct {
    className string
}

func (cla *ClassName) OutClassName() {
    fmt.Println(cla.className)
}

type Student struct { //定义结构体
    name      string
    age       int
    ClassName // 继承ClassName结构体的所有
}

func (stu *Student) OutName() { // 定义Student方法
    fmt.Println(stu.name)
}

func main() {
    s1 := new(Student) // 定义指向结构体的指针
    s1.className = "xiaomu"
    s1.OutClassName()
}
ログイン後にコピー
# に吸収されます。 ##詳細 関連する知識については、

go 言語チュートリアル に注目してください。

以上がGo言語の構造とメソッドを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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