golang中结构体的初始化方法(new方法)(代码片段)

enumx enumx     2023-04-17     689

关键词:

自定义一个结构体

type Rect struct

x, y float64

width, height float64

初始化方法:

rect1 := new(Rect)

rect2 := &Rect

rect3 := &Rect0, 0, 100, 200

rect4 := &Rectwidth:100, height:200

注意这几个变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和&操作符.而如果使用方法

a := Rect

则表示这个是一个Rect类型.两者是不一样的.参考代码:

func main()

rect1 := &Rect0, 0, 100, 200

rect1.x = 10

a := Rect

a.x = 15

fmt.Printf("%v %T ", a, a)

fmt.Printf("%v %T ", rect1, rect1)

运行结果为:

15 0 0 0

main.Rect

&10 0 100 200

*main.Rect

从结果中可以清楚的看到两者的不同.

在Go语言中,未进行初始化的变量都会被初始化为该类型的零值,例如bool类型的零值为false, int类型的零值为0, string类型的零值为空字符串. 在Go语言中没有构造函数的概念,对象的创建通常交由一个全局的创建函数来完成,以NewXXX来命令,表示"构造函数":

func NewRect(x ,y ,width, height float64) *Rect

return &Rectx, y, width, height

这一切非常自然.开发者也不需要分析在使用了new之后到底背后发生了多少事情.在Go语言中,一切要发生的事情都直接可以看到. 附:

用 new 分配内存 内建函数 new 本质上说跟其他语言中的同名函数功能一样:new(T) 分配了零值填充的 T 类型的内存空间,并且返回其地址,一个 *T 类型的值。用 Go 的术语说,它返回了一个指针,指向新分配的类型 T 的零值。记住这点非常重要。 这意味着使用者可以用 new 创建一个数据结构的实例并且可以直接工作。如 bytes.Buffer的文档所述 “Buffer 的零值是一个准备好了的空缓冲。” 类似的,sync.Mutex 也没有明确的构造函数或 Init 方法。取而代之,sync.Mutex 的零值被定义为非锁定的互斥量。 零值是非常有用的。例如这样的类型定义,56 页的”定义自己的类型” 内容。 ===================

务必记得 make 仅适用于 map,slice 和 channel,并且返回的不是指针。应当用 new获得特定的指针。

golang使用匿名结构体的问题

...    param2string   一般在使用的时候可以直接这样初始化a:=Testparam1:structparam2stringparam2:"test",  或者b:=new(Test)b.param1.param2="test"  但今天遇到一种情况匿名结构体的成员上有tag 查看详情

golang中定义的某个interface作为函数的入参时

参考技术A函数的入参是某个interface,那么函数里调用interface里的方法时,如果方法里有修改结构体变量,会修改原有的变量么?1.方法的接收器是指针,结构体的成员变量是指针变量。变量被修改了。2.方法的接收器是指针,结... 查看详情

golang结构体初始化的几种方式(代码片段)

new初始化结构体指针可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址。格式如下:packagemainimport"fmt"typestustruct name,addressstringfuncmain() //结构体指针1 varstu1=new(stu) stu1.name="张三" (*st 查看详情

golang中级进阶(二):结构体

...构体3.结构体标签tag4.嵌套结构体和json的序列化反序列化Golang中没有“类”的概念,Golang中的结构体和其他语言中的类有点相似。和其他面向对象语言中的类相比,Golang中的结构体具有更高的扩展性和灵活性。Golang中的基础数据... 查看详情

go语言结构体(代码片段)

文章目录一、Go语言结构体二、结构体的实例化三、初始化结构体成员方法四、模拟构造函数五、Go语言方法和接收器5.1基础概念5.2为结构体添加方法六、为任意类型添加方法七、Go语言使用事件系统实现事件的响应和处理7.1基础... 查看详情

结构体及共用体的初始化方法

结构体初始化: /************************************************************* 全局变量定义************************************************************/AD_CTL_STg_AdCtl;//定义结构体变量AD_BUF_STg_AdBuf[BUF_NUM]; 查看详情

golang指针和结构体

参考技术A于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一类型的数据。定义一个指针变量,将变量a的地址赋给指针变量p。这样,指针变量p也就指向了变量a所在的内容空间。new函数返... 查看详情

[go]go语言中结构体的三种初始化方式

结构体定义后,有三种方式去初始化这个结构体,在看一些源码的时候容易犯迷糊1.第一种new的方式t:=new(T) t现在是指向该结构体的指针,是*T类型 2.第二种var的方式vartT  结构体现在就已经被初始化了,是T类型 第三... 查看详情

golang之结构体和方法(代码片段)

结构体的定义结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型。每个变量都叫做结构体的成员。其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语言放弃了包括继承在内的大... 查看详情

[go]go语言中结构体的三种初始化方式

结构体定义后,有三种方式去初始化这个结构体,在看一些源码的时候容易犯迷糊1.第一种new的方式t:=new(T) t现在是指向该结构体的指针,是*T类型 2.第二种var的方式vartT  结构体现在就已经被初始化了,是T类型 第三... 查看详情

golang语言构造函数

...义构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来... 查看详情

golang入门:结构体(struct)(代码片段)

...些数据。结构体的概念在C语言里很常见,被称为struct。Golang中的结构体也是struct。Go语言中没有类的概念,因此在Go中结构体有着更为重要的地位。结构体是复合类型(compositetypes),当需要定义一个类型,它由一系列属性组成,每... 查看详情

golang之继承,多重继承(struct)

热乎的代码来了packagemainimport"fmt"/*继承一个结构体嵌到另一个结构体,称作组合匿名和组合的区别如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现继承如果一个struct嵌套了另一个... 查看详情

观察 Swift 结构体的变化

...型或视图控制器的结构。这是因为我想通过更改模型重新初始化一堆属性,并且使用一个类作为视图模型只允许一个初始化。但是,它还没有找到一种方法让视图观察视图模型中的新结构/结构的变化。我的问题示例:classModel:Obs 查看详情

go语言学习之旅--结构体(代码片段)

...结构体go语言结构体的定义声明一个结构体变量结构体的初始化访问结构体成员匿名结构体结构体指针举例使用new关键字创建结构体指针访问结构体指针成员结构体作为函数参数定义直接传递结构体传递结构体指针嵌套结构体gola... 查看详情

golangbasic_leaming结构体(代码片段)

...型别名3、自定义类型和类型别名的区别三、结构体定义初始化的几种方法1、结构体的定义2、结构体实例化(第一种方法)3、结构体实例化(第二种方法)4、结构体实例化(第三种方法)5、结构体实例化... 查看详情

golangbasic_leaming结构体(代码片段)

...型别名3、自定义类型和类型别名的区别三、结构体定义初始化的几种方法1、结构体的定义2、结构体实例化(第一种方法)3、结构体实例化(第二种方法)4、结构体实例化(第三种方法)5、结构体实例化... 查看详情

go语言基础:结构体(代码片段)

...结构体创建指针类型结构体取结构体的地址实例化结构体初始化使用键值对初始化结构体内存布局占用连续的内存。空结构体面试题构造函数方法和接收者指针和值类型的接收者什么时候应该使用指针类型接收者任意类型添加方... 查看详情