golang怎么给空结构体赋值

以你之姓@ 2023-01-15 08:10 261阅读 0赞

一、前言

  1. 最近没少使用`golang`,也没经过系统的学习,直接就上去开发了,遇到不少坑也学到不少东西,本次记录下给空结构体赋值的问题。

二、案例

1.结构体结构及错误

  1. type Test struct {
  2. Test1 int64 `gorm:"column:test1" json:"test1"`
  3. Test2 string `gorm:"column:test2" json:"test2"
  4. }
  5. var test []*Test
  6. //这种方式是失败的? 因为目前是空的,不能用类似于php的方法写死
  7. test[0].Test1 = xxx
  8. test[0].Test2 = xxxx
  9. 这里可以看到,本来想直接填充来着,但是死活写入不了,惯性思维害死人啊,网上百度原因 是一个空的结构体,指针为`nil`,是不占用内存空间的,无法赋值

2.给空结构体赋值的方式

(1)第一种方法

  1. 直接赋值 (表示这个是一个testStruct{}类型)
  2. test1 :=testStruct{
  3. Test1: xx,
  4. Test2: xx,
  5. }

(2) 第二种方法

  1. test1 := &testStruct{}
  2. test1.Test1 = int64(0)

(3)第三种方法

  1. test1 :=new(testStruct)
  2. test1.Test1 = int64(0)

(4)关于new和make初始化的区别

  1. new 适用于创建指针,一般创建基本类型,int等,返回的是指针
  2. make:主要创建引用类型,比如切片,map。返回的是创建的类型本身的引用,修改的话会影响到本身,类似于php的&
  3. make类似于[]int{} 来初始化。
  4. 说实话,稍微有点繁琐了,其实关键还是在初始化这个结构体的时候,加引用就好了,这样返回的不是`nil`,剩下的自然就好操作了。。

end

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读

    相关 golang结构定义

    结构体 Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。 Go...

    相关 golang 结构简介

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型。试图表示一个现实世界中的实体。 结构体由一系列命名的元素组成,这些元素又被称为字