首頁 >後端開發 >Golang >go語言中的結構體與方法詳解

go語言中的結構體與方法詳解

尚
轉載
2020-06-19 17:44:193597瀏覽

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)
}

結構體定義的三種方式,例如上面的Student類型,有以下方式定義

①var s1 Student      在記憶體中直接定義一個結構體變數

②s1 := new( Student)  在記憶體中定義一個指向結構體的指標

③s1 := &Student{}    同上

透過以下方式取得儲存的值

# ①s1.name

②s1.name或(*s1).name

③同上

##2、struct中的「建構子」,稱之為工廠模式,請參閱程式碼

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的方法

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中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除