准备工作:

  定义结构体:Student

  1.  
  1. import (
    "fmt"
    "reflect"
    )

  1. type Student struct {
  2. StudentId string `json:"sid"`
  3. StudentName string `json:"sname"`
  4. StudentClass string `json:"class"`
  5. StudentTeacher string `json:"class"`
  6. }

测试代码如下:

  

  1. func main() {
  2. s0 := Student{}
  3. fmt.Println(s0)
  4. fmt.Println(reflect.TypeOf(s0))
  5.  
  6. s1 := new(Student)
  7. fmt.Println(s1)
  8. fmt.Println(reflect.TypeOf(s1))
  9.  
  10. s2 := &Student{}
  11. fmt.Println(s2)
  12. fmt.Println(reflect.TypeOf(s2))
  13.  
  14. s3 := &Student{"", "", "100", "200"}
  15. fmt.Println(s3)
  16. fmt.Println(reflect.TypeOf(s3))
  17.  
  18. s4:= &Student{StudentId: "100", StudentName: "200"}
  19. fmt.Println(s4)
  20. fmt.Println(reflect.TypeOf(s4))
  21.  
  22. }

输出结果:

  1. { }
  2. main.Student
  3. &{ }
  4. *main.Student
  5. &{ }
  6. *main.Student
  7. &{ 100 200}
  8. *main.Student
  9. &{100 200 }
  10. *main.Student

注意:

  除了s0以外,s1-s4变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和&操作符

  而s0的方法  s0 := Student{} 表示的是一个Student类型,两者是不一样的

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

  1. func NewStudent() {
      return &Student() //返回指针

  2. }

用 new 分配内存 内建函数 new 本质上说跟其他语言中的同名函数功能一样:new(T) 分配了零值填充的 T 类型的内存空间,并且返回其地址,一个 *T 类型的值。

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

参考:

  https://studygolang.com/articles/4974

【golang】golang中结构体的初始化方法(new方法)的更多相关文章

  1. 关于c语言中结构体的初始化

    1.先定义结构体类型后再定义结构体变量: 格式为:struct 结构体名 变量名列表: struct book s1,s2,*ss://注意这种之前要先定义结构体类型后再定义变量: 2.在定义结构体类 ...

  2. 浅谈C语言中结构体的初始化

    转自:http://www.jb51.net/article/37246.htm <代码大全>建议在变量定义的时候进行初始化,但是很多人,特别是新人对结构体或者结构体数组定义是一般不会初始 ...

  3. 关于c++中结构体列表初始化,聚合问题

    聚合(aggregate) C++语法规定:不能使用初始值列表来初始化"非聚合(non-aggregate)"的对象.那么,什么才算是"聚合"呢?C++认为聚合 ...

  4. C语言中结构体的初始化

    直接上例子: struct point { int x; int y; int z; } //常规写法 struct point pt1 = {100, 300, 200}; //初始化个数少于实际个 ...

  5. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

  6. golang基础--strcut结构体

    结构体struct类似python语言中的类class,结构体类的元素可以是一个变量,或者函数或者其它的类型,好比python的属性和方法. // struct结构体,类似python语言中的clas ...

  7. Golang通脉之结构体

    Go语言中的基础数据类型可以表示一些事物的基本属性,但是要表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型, ...

  8. Linux C中结构体初始化

          在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated in ...

  9. (转)关于linux中内核编程中结构体的赋值操作(结构体指定初始化)

    网址:http://blog.chinaunix.net/uid-24807808-id-3219820.html 在看linux源码的时候,经常会看到类似于下面的结构体赋值的代码: struct d ...

随机推荐

  1. mysql索引设计的注意事项(大量示例,收藏再看)

    mysql索引设计的注意事项(大量示例,收藏再看) 目录 一.索引的重要性 二.执行计划上的重要关注点 (1).全表扫描,检索行数 (2).key,using index(覆盖索引) (3).通过ke ...

  2. 【转载】Java泛型详解

    [转载]http://www.importnew.com/24029.html 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考 ...

  3. c#(NPOI)DataTable导出execl,execl(支持解析公式)导入DataTable

    NPOI(C#)DataTable导出execl using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserMod ...

  4. ThinVnc-身份验证绕过(CVE-2019-17662)

    ThinVnc-身份验证绕过(CVE-2019-17662) 简介 ThinVNC是一款以网页浏览器为基础设计的远端桌面连接工具,不局限用户端使用那种作业平台,都可以通过采用HTML5为标准的浏览器来 ...

  5. Spring 中的事务

    前言: 之前总结了事务以及数据库中事务相关的知识点,Spring 对于事务做了相应的封装,便于业务开发中使用事务. 项目中使用Spring中的事务首先时基于Mysql数据库中InnoDB 引擎的,如果 ...

  6. JS五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解(转载)

    目录 壹 ❀ 引 贰 ❀ this默认绑定 叁 ❀ this隐式绑定 1.隐式绑定 2.隐式丢失 肆 ❀ this显式绑定 伍 ❀ new绑定 陆 ❀ this绑定优先级 柒 ❀ 箭头函数的this ...

  7. C# 应用 - 多线程 6) 处理同步数据之手动同步 AutoResetEvent 和 ManualResetEvent

    1. 类的关系 AutoResetEvent 和 ManualResetEvent 都继承自 System.Threading.EventWaitHandle 类(EventWaitHandle 继承 ...

  8. string与bson.ObjectId之间格式转换

    string转bson.ObjectId bson.ObjectIdHex(string) bson.ObjectId转string日后再补

  9. 采用React + Fabric + ImageMagick 实现大图片DIY定制

    一,需求背景: 某个印刷公司,有一系列的设计文件模板.接到客户订单时,就在这些设计文件模板上,做一些简单的定制,就能够满足客户的印刷需求. 如在设计文件模板上添加客户的Logo,二维码,联系方式等. ...

  10. java例题_25 判断是否为回文数!

    1 /*25 [程序 25 求回文数] 2 题目:一个 5 位数,判断它是不是回文数.即 12321 是回文数,个位与万位相同,十位与千位相同. 3 */ 4 5 /*分析 6 * 先用%和/将5个数 ...