go結構體與方法

go結構體至關於python中類的概念

結構體用來定義複雜的數據結構,存儲不少相同的字段屬性python

一、結構體的定義以及簡單實用數據結構

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{}    同上

經過如下方式獲取存儲的值spa

①s1.name
②s1.name或者(*s1).name
③同上

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

三、特地聲明注意事項!!!code

結構體是值類型,須要使用new分配內存blog

四、匿名字段,直接看下面代碼繼承

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

一、在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()
}

二、結構體繼承結構體,其中被繼承結構體的方法所有爲繼承結構體吸取(吸星大法)string

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()
}
相關文章
相關標籤/搜索