1. 程式人生 > 其它 >【go筆記】結構體

【go筆記】結構體

go語言學習筆記之結構體

基礎

結構體是一系列不同或者相同資料型別的資料結構構成的資料集合,概念有點像面向物件中的類,但是更輕量。go語言的結構體跟c語言比較相似,都是通過struct關鍵字去構建。

Go語言中宣告一個結構體的基本語法如下:

type 型別名 struct {
    欄位1 欄位1型別
    欄位2 欄位2型別
    ...
    欄位n 欄位n型別
}

宣告一個結構體方法的基本語法如下:

func (物件名 結構體型別) 方法名(方法引數) 返回值型別 {
    // 方法體
}

// 示例
type Student struct {
    Name string
    Age int
}
func (sth Student) CreateNew(name string,age int) Student {
    stu.Name = name
    sth.Age = age
    
    return stu
}

func main() {
    stu := Student{}
    stu = stu.CreateNew("zhangsan",33)
    fmt.Printf("%+v", stu)
}

結構體巢狀

Go語言結構體的巢狀可以實現類似面向物件繼承的效果。

示例程式碼:

type Address struct {
    Province string
    City string
    Steet string
}
type Student struct {
    Name string
    Age int
    Address Address
}
func main() {
    stu1 := Student{}
    stu1.Name = "zhangsan"
    stu1.Age = 33
    stu1.Address.Province = "AH"
    stu1.Address.City = "HF"
    stu1.Address.Street = "BuXing"
    fmt.Printf("%+v", stu1)
}

匿名結構體

Go語言還支援一種匿名結構體,定義時不用type關鍵字,於定義普通型別的變數一樣。如果在函式體外定義匿名結構體變數,那麼就需要var關鍵字,但在函式體類可省略。基本語法如下:

var 變數名 struct {
    欄位1 欄位1型別
    欄位2 欄位2型別
    ...
    欄位n 欄位n型別
}

匿名結構體一般用作全域性的配置資料儲存結構。示例程式碼:

// 匿名結構體
var mysqlConfig struct {
    user string
    password string
    host string
    port int
}
func main() {
    mysqlConfig.user = "root"
    mysqlConfig.password = "123456"
    mysqlConfig.host = "127.0.0.1"
    mysqlConfig.port = 3306
    
    // 用短變數的方式定義一個匿名結構體,宣告結構的同時還要進行初始化
    config2 := struct {
        user string
        password string
        host string
        port int
    }{"root","123456","192.168.0.2",3306}
}