golang怎么给空结构体赋值
一、前言
最近没少使用`golang`,也没经过系统的学习,直接就上去开发了,遇到不少坑也学到不少东西,本次记录下给空结构体赋值的问题。
二、案例
1.结构体结构及错误
type Test struct {
Test1 int64 `gorm:"column:test1" json:"test1"`
Test2 string `gorm:"column:test2" json:"test2"
}
var test []*Test
//这种方式是失败的? 因为目前是空的,不能用类似于php的方法写死
test[0].Test1 = xxx
test[0].Test2 = xxxx
这里可以看到,本来想直接填充来着,但是死活写入不了,惯性思维害死人啊,网上百度原因 是一个空的结构体,指针为`nil`,是不占用内存空间的,无法赋值
2.给空结构体赋值的方式
(1)第一种方法
直接赋值 (表示这个是一个testStruct{}类型)
test1 :=testStruct{
Test1: xx,
Test2: xx,
}
(2) 第二种方法
test1 := &testStruct{}
test1.Test1 = int64(0)
(3)第三种方法
test1 :=new(testStruct)
test1.Test1 = int64(0)
(4)关于new和make初始化的区别
new: 适用于创建指针,一般创建基本类型,int等,返回的是指针
make:主要创建引用类型,比如切片,map。返回的是创建的类型本身的引用,修改的话会影响到本身,类似于php的&
make类似于[]int{} 来初始化。
说实话,稍微有点繁琐了,其实关键还是在初始化这个结构体的时候,加引用就好了,这样返回的不是`nil`,剩下的自然就好操作了。。
end
还没有评论,来说两句吧...