Golang 菜鳥教程

Golang 控制語句

Golang 函數(shù) & 方法

Golang 結(jié)構(gòu)體

Golang 切片 & 數(shù)組

Golang 字符串(String)

Golang 指針

Golang 接口

Golang 并發(fā)

Golang 異常(Error)

Golang 其他雜項(xiàng)

Go 語言結(jié)構(gòu)體(struct)

Golang中的結(jié)構(gòu)(struct)是一種用戶定義的類型,允許將可能不同類型的項(xiàng)分組/組合成單個(gè)類型。任何現(xiàn)實(shí)世界中擁有一組屬性/字段的實(shí)體都可以表示為結(jié)構(gòu)。這個(gè)概念通常與面向?qū)ο缶幊讨械念愡M(jìn)行比較。它可以被稱為不支持繼承但支持組合的輕量級類。

例如,一個(gè)地址具有name,street,city,state,Pincode。如下所示,將這三個(gè)屬性組合為一個(gè)結(jié)構(gòu)Address是有意義的。

聲明結(jié)構(gòu):

 type Address struct {
      name string 
      street string
      city string
      state string
      Pincode int
}

在上面,type關(guān)鍵字引入了一個(gè)新類型。其后是類型的名稱(Address)和關(guān)鍵字struct,以說明我們正在定義結(jié)構(gòu)。該結(jié)構(gòu)包含花括號內(nèi)各個(gè)字段的列表。每個(gè)字段都有一個(gè)名稱和類型。

注意:我們還可以通過組合相同類型的各個(gè)字段來使它們緊湊,如下例所示:

type Address struct {
    name, street, city, state string
    Pincode int
}

定義結(jié)構(gòu):聲明結(jié)構(gòu)的語法:

var a Address

上面的代碼創(chuàng)建一個(gè)Address類型的變量,默認(rèn)情況下將其設(shè)置為零。對于結(jié)構(gòu),零表示所有字段均設(shè)置為其對應(yīng)的零值。因此,字段name,street,city,state都設(shè)置為“”,而Pincode設(shè)置為0。

您還可以使用結(jié)構(gòu)字面量來初始化結(jié)構(gòu)類型的變量,如下所示:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}

注意:

始終以在結(jié)構(gòu)中聲明它們的順序傳遞字段值。同樣,您不能僅使用上述語法初始化字段的子集。

Go還支持名稱:value語法,用于初始化結(jié)構(gòu)(使用此語法時(shí)字段的順序無關(guān)緊要)。而且,這僅允許您初始化字段的子集。所有未初始化的字段均設(shè)置為其相應(yīng)的零值。

例如:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package main 
  
import "fmt"
  
//定義結(jié)構(gòu)類型
type Address struct { 
    Name    string 
    city    string 
    Pincode int
} 
  
func main() { 
  
        //聲明一個(gè)“struct”類型的變量
        //初始化所有struct字段
        //其值為零
    var a Address  
    fmt.Println(a) 
  
        //聲明和初始化
        // struct使用結(jié)構(gòu)文字
    a1 := Address{"Akshay", "Dehradun", 3623572} 
  
    fmt.Println("Address1: ", a1) 
  
        //在命名字段時(shí)
        //初始化一個(gè)結(jié)構(gòu)
    a2 := Address{Name: "Anikaa", city: "Ballia",Pincode: 277001} 
  
    fmt.Println("Address2: ", a2) 
  
        //未初始化的字段設(shè)置為
        //它們對應(yīng)的零值
    a3 := Address{Name: "Delhi"} 
    fmt.Println("Address3: ", a3) 
}

輸出:

{  0}
Address1:  {Akshay Dehradun 3623572}
Address2:  {Anikaa Ballia 277001}
Address3:  {Delhi  0}

如何訪問結(jié)構(gòu)的字段?

要訪問結(jié)構(gòu)的各個(gè)字段,您必須使用點(diǎn)(.)運(yùn)算符。

package main 
  
import "fmt"
  
//定義結(jié)構(gòu)體 
type Car struct { 
    Name, Model, Color string 
    WeightInKg         float64 
} 
  

func main() { 
    c := Car{Name: "Ferrari", Model: "GTC4", Color: "Red", WeightInKg: 1920} 
  
        //訪問結(jié)構(gòu)字段
        //使用點(diǎn)運(yùn)算符
    fmt.Println("Car Name: ", c.Name) 
    fmt.Println("Car Color: ", c.Color) 
        //賦新值
        //指向一個(gè)結(jié)構(gòu)字段
    c.Color = "Black"
      
    //顯示結(jié)果
    fmt.Println("Car: ", c) 
}

輸出:

Car Name:  Ferrari
Car Color:  Red
Car:  {Ferrari GTC4 Black 1920}

指向結(jié)構(gòu)的指針

Golang中的指針是一個(gè)變量,用于存儲(chǔ)另一個(gè)變量的內(nèi)存地址。您還可以創(chuàng)建一個(gè)指向結(jié)構(gòu)的指針,如以下示例所示:

// 指向結(jié)構(gòu)體的指針
package main 
  
import "fmt"
  
// 定義一個(gè)結(jié)構(gòu)
type Employee struct { 
    firstName, lastName string 
    age, salary int
} 
  
func main() { 
  
        //傳遞struct變量的地址
        // emp8是指向Employee結(jié)構(gòu)的指針
    emp8 := &Employee{"Sam", "Anderson", 55, 6000} 
  
        //(* emp8).firstName是要訪問的語法
        // emp8結(jié)構(gòu)的firstName字段
    fmt.Println("First Name:", (*emp8).firstName) 
    fmt.Println("Age:", (*emp8).age) 
}

輸出:

First Name: Sam
Age: 55

Golang為我們提供了使用emp8.firstName而不是顯式解引用(* emp8).firstName來訪問firstName字段的選項(xiàng)。 顯示此示例如下:

//指向結(jié)構(gòu)的指針
package main 
  
import "fmt"
  
//定義一個(gè)結(jié)構(gòu)
type Employee struct { 
    firstName, lastName string 
    age, salary         int
} 
  
func main() { 
  
    //獲取指向結(jié)構(gòu)體的指針
    emp8 := &Employee{"Sam", "Anderson", 55, 6000} 
  
        // emp8.firstName用于訪問
        //字段firstName
    fmt.Println("First Name: ", emp8.firstName) 
    fmt.Println("Age: ", emp8.age) 
}

輸出:

First Name:  Sam
Age:  55
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清