一、前言

最近没少使用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 = xxxtest[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

golang怎么给空结构体赋值相关推荐

  1. go语言-空结构体/ chan struct{}

    文章目录 空结构体 struct{} chan struct{} 常用用法 带缓冲的chan struct{}数据读写 空结构体 struct{} 空结构体的宽度是0,占用了0字节的内存空间. var ...

  2. Golang之空结构体和零长数组的实践

    空结构体和零长数组(两个复合类型)都仅仅是一个占位符,不占用空间,这里编译器进行了优化,如果结构体或数组的unsafe.sizeof=0则直接返回zerobase. // 必须用key来初始化结构体 ...

  3. 换个语言学一下 Golang (9)——结构体和接口

    换个语言学一下 Golang (9)--结构体和接口 基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就 ...

  4. C99标准的结构体赋值注解

    关于结构体的赋值问题 #include <stdio.h>static struct id_mesg{char *name;unsigned int age;char *job; }; s ...

  5. C语言结构体赋值和有指针成员的结构体赋值

    1  结构体赋值 #include <windows.h>struct MyStruct {int a;int b;char c[20]; };int APIENTRY WinMain(H ...

  6. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { };int main() {st ...

  7. go struct{} 空结构体的特点和作用

    空结构体的特点和作用 参考代码 package mainimport ("fmt""unsafe" )func main() {empStruct() } // ...

  8. 【C语言】结构体赋值

    结构体在 C 程序中使用的较为频繁,能对数据有一定的封装的作用.对一个结构体赋值时,经常采用的方式是,分别对其成员变量赋值.那么能否将一个结构体用赋值号("=")直接赋值给另一个结 ...

  9. Go 空结构体的 3 种使用场景

    转子地址:https://mp.weixin.qq.com/s/zWzyl6x9sZdXZCaAuva2lA 在 Go 语言中,有一个比较特殊的类型,经常会有刚接触 Go 的小伙伴问到,又或是不理解. ...

最新文章

  1. Helm包管理工具(简介、安装、方法)
  2. tableau系列之如何将甘特图做成瀑布图
  3. ATDD验收测试驱动开发
  4. OpenCV:使用OpenCV3随机森林进行统计特征多类分析
  5. 美团点评Kubernetes集群管理实践
  6. docker php gd png.h,docker php 容器安装GD库
  7. 演练 开心庄园 1002
  8. 问题:如何将多个文件里内容都提取出来
  9. java中成绩转换_成绩转换
  10. vs2010插件之VisualSVN
  11. Domain Adaptation 论文笔记
  12. 华为云服务器建站教程
  13. android ipad 播放器,[AS3]专业级跨平台网页播放器支持PC、iPad、iPhone、Android系统...
  14. 轻松选择/复制word文档的整个章节的内容
  15. 朱嘉明:数字经济和非同质时代——NFT
  16. seo引流怎么做?SEO引流方法有哪些?如何做好seo引流
  17. Qt调用exit()、quit()不生效问题
  18. php通过api获取天气信息,调用API获取城市天气信息
  19. 重组人碱性成纤维细胞生长因子(附文献)
  20. 列表3:修改删除函数实操

热门文章

  1. 做diff_Vue3.0时代你必须了解的:diff算法原理和优化
  2. SCRFD is not in the models registry
  3. win10 ndk hello_world
  4. Failed to resolve hostname 192: The name does not resolve for the supplied parameters
  5. 0x00007FF8EDA19A9D (ntdll.dll)处引发的异常: 0xC0000005: 写入位置 0x00000000CED889F8 时发生访问冲突
  6. pybind 编码h264
  7. Multiple Object Tracking:多目标跟踪综述
  8. layui table is not a valid module
  9. Windows10 右键 cmd
  10. Python DAG—归简法—拓扑排序