golangstruct初始化

一、基本概念

golang中struct是一種複合數據結構,它可以包含零個或多個任意類型的字段。如果我們在定義struct的同時初始化它,我們可以使用字段名稱來顯式初始化每個字段。

package main

import "fmt"

type person struct {
    name string
    age  int
}

func main() {
    p1 := person{"Alice", 20}
    fmt.Println(p1)
}

以上代碼定義了一個person結構體,並使用字段名稱初始化了它的兩個字段name和age。然後我們創建了一個p1的變量,並將這個person結構體實例化賦值給它。最後使用fmt.Println來打印這個person實例。

二、匿名結構體初始化

匿名結構體沒有類型名稱,我們可以在創建struct變量時直接初始化它。這在一些臨時場景下非常有用,比如我們需要把一些數據打包成一個結構體傳遞給函數參數。

package main

import "fmt"

func main() {
    p1 := struct {
        name string
        age  int
    }{
        name: "Alice",
        age:  20,
    }
    fmt.Println(p1)
}

上面的例子中,我們創建了一個匿名結構體,初始化name和age字段,並將實例化賦值給p1變量。

三、指針struct初始化

如果我們初始化一個指向struct的指針變量,可以使用&符號進行操作。結構體指針變量在指向結構體實例前必須被初始化。結構體指針變量是使用* 語法定義的。

package main

import "fmt"

type person struct {
    name string
    age  int
}

func main() {
    p1 := &person{
        name: "Alice",
        age:  20,
    }
    fmt.Println(p1)
}

這個例子中,我們定義了一個person結構體,通過&和結構體字面量初始化一個person指針變量p1,並使用name和age字段進行初始化。

四、繼承初始化

在golang中,可以通過嵌入其他結構體來實現繼承,使用起來非常方便。當我們使用嵌入式結構來定義一個新的struct時,被嵌入的結構體的字段會成為新的結構體的一部分,訪問時我們可以通過嵌套結構體字段的名稱來訪問。

package main

import "fmt"

type person struct {
    name string
    age  int
}

type employee struct {
    person
    id int
}

func main() {
    e1 := employee{
        person: person{"Alice", 20},
        id:     1,
    }
    fmt.Println(e1)
}

在上面的例子中,我們定義了一個person結構體和employee結構體,在employee結構體中嵌入了person結構體。我們使用person結構體實例初始化employee結構體實例,同時初始化了id字段。最後使用fmt.Println打印employee實例時,它包含嵌套的person實例。

五、結構體零值初始化

在golang中,當我們定義一個struct時,默認情況下它的所有字段都被初始化為零值。對於數值類型,默認值為0,布爾類型默認值為false,字符串類型默認值為””,指針類型默認值為nil。

package main

import "fmt"

type person struct {
    name string
    age  int
}

func main() {
    var p1 person
    fmt.Println(p1)
}

這個例子中,我們定義了一個person結構體,並使用var關鍵字初始化一個空的person實例p1。由於person結構體中的字段都是空的,所以運行這個程序時我們會看到{name:””, age:0}被打印出來。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/304624.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:05
下一篇 2025-01-01 11:05

相關推薦

  • Go中struct的初始化

    本文將從多個方面詳細闡述Go中struct的初始化方式,包括使用字面量初始化、使用new函數初始化以及使用構造函數等。通過本文的介紹,讀者能夠更深入的了解Go中struct的初始化…

    編程 2025-04-28
  • C# Dictionary初始化的詳解

    一、基礎認識 C#中的Dictionary是一種鍵值對存儲的數據類型,可以根據鍵(Key)訪問對應的值(Value),它是.NET Framework中的常用類之一。創建Dicti…

    編程 2025-04-23
  • JS初始化詳解

    JavaScript是一門動態的、基於事件驅動的編程語言,可以使網頁在用戶交互時產生動態特效和更好的交互性。JS的初始化是網頁中必不可少的一環,好的初始化可以提高網頁的加載速度和用…

    編程 2025-04-23
  • vector初始化賦值詳解

    一、基礎概念 vector是一個封裝了動態大小數組的順序容器(Sequence Container)。與C-style數組不同,它能夠根據需要自動擴展,它是連續存儲的,與數組一樣高…

    編程 2025-04-22
  • Kotlinlateinit:深入理解 Kotlin 的延遲初始化屬性

    Kotlinlateinit 是 Kotlin 延遲初始化屬性的一個重要概念。在一些情況下,Kotlin 允許我們在聲明屬性時使用 lateinit 關鍵字,來將屬性的初始化推遲到…

    編程 2025-04-12
  • C++ Vector初始化

    一、定義和構造函數 C++中的vector是一個類模板,它是一種動態數組,支持在數組的尾部增加或刪除元素。在使用vector進行初始化時,有兩種常見的方法。 第一種是使用定義和構造…

    編程 2025-04-12
  • Go 結構體初始化詳解

    Go 是一門現代化的編程語言,內置了一些非常強大的數據結構,其中最常用的就是結構體 (struct)。結構體是一種將數據合併在一起的方式,可以將不同類型的數據組合在單個結構中,使其…

    編程 2025-02-25
  • Java Map初始化的多方面闡述

    一、基礎使用 Java中的Map是一種鍵-值對的集合,允許存儲不同類型的數據。在Map中,每個鍵最多只能出現一次,而每個值可以出現多次。常用的Map實現類包括HashMap、Tre…

    編程 2025-02-24
  • c++ 二維vector的初始化

    一、vector概述 vector 是 c++ 標準庫中的一個動態數組容器,可以動態的增刪元素。vector 內部維護着一塊連續的內存,動態增加或者刪去元素時,vector會重新分…

    編程 2025-02-05
  • 使用Webpack初始化Vue應用的步驟

    Vue是一種前端框架,用於開發快速高效、高交互性和易於維護的Web應用程序,並且受Web包管理器Webpack支持。在這篇文章中,我們將詳細講解如何使用Webpack初始化Vue應…

    編程 2025-02-05

發表回復

登錄後才能評論