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/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

发表回复

登录后才能评论