C語言中文網 目錄

Go語言初始化內嵌結構體

結構體內嵌初始化時,將結構體內嵌的類型作為字段名像普通結構體一樣進行初始化,詳細實現過程請參考下面的代碼。

車輛結構的組裝和初始化:
package main

import "fmt"

// 車輪
type Wheel struct {
    Size int
}

// 引擎
type Engine struct {
    Power int    // 功率
    Type  string // 類型
}

// 車
type Car struct {
    Wheel
    Engine
}

func main() {

    c := Car{

        // 初始化輪子
        Wheel: Wheel{
            Size: 18,
        },

        // 初始化引擎
        Engine: Engine{
            Type:  "1.4T",
            Power: 143,
        },
    }

    fmt.Printf("%+v\n", c)

}
代碼說明如下:
  • 第 6 行定義車輪結構。
  • 第 11 行定義引擎結構。
  • 第 17 行定義車結構,由車輪和引擎結構體嵌入。
  • 第 27 行,將 Car 的 Wheel 字段使用 Wheel 結構體進行初始化。
  • 第 32 行,將 Car 的 Engine 字段使用 Engine 結構體進行初始化。

初始化內嵌匿名結構體

在前面描述車輛和引擎的例子中,有時考慮編寫代碼的便利性,會將結構體直接定義在嵌入的結構體中。也就是說,結構體的定義不會被外部引用到。在初始化這個被嵌入的結構體時,就需要再次聲明結構才能賦予數據。具體請參考下面的代碼。
package main

import "fmt"

// 車輪
type Wheel struct {
    Size int
}

// 車
type Car struct {
    Wheel
    // 引擎
    Engine struct {
        Power int    // 功率
        Type  string // 類型
    }
}

func main() {

    c := Car{

        // 初始化輪子
        Wheel: Wheel{
            Size: 18,
        },

        // 初始化引擎
        Engine: struct {
            Power int
            Type  string
        }{
            Type:  "1.4T",
            Power: 143,
        },
    }

    fmt.Printf("%+v\n", c)

}
代碼說明如下:
  • 第 14 行中原來的 Engine 結構體被直接定義在 Car 的結構體中。這種嵌入的寫法就是將原來的結構體類型轉換為 struct{…}。
  • 第 30 行,需要對 Car 的 Engine 字段進行初始化,由于 Engine 字段的類型并沒有被單獨定義,因此在初始化其字段時需要先填寫 struct{…} 聲明其類型。
  • 第 3行開始填充這個匿名結構體的數據,按“鍵:值”格式填充。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo