准备工作:

  定义结构体:Student


import (
"fmt"
"reflect"
)

type Student struct {
StudentId string `json:"sid"`
StudentName string `json:"sname"`
StudentClass string `json:"class"`
StudentTeacher string `json:"class"`
}

测试代码如下:

  

func main() {
s0 := Student{}
fmt.Println(s0)
fmt.Println(reflect.TypeOf(s0)) s1 := new(Student)
fmt.Println(s1)
fmt.Println(reflect.TypeOf(s1)) s2 := &Student{}
fmt.Println(s2)
fmt.Println(reflect.TypeOf(s2)) s3 := &Student{"", "", "100", "200"}
fmt.Println(s3)
fmt.Println(reflect.TypeOf(s3)) s4:= &Student{StudentId: "100", StudentName: "200"}
fmt.Println(s4)
fmt.Println(reflect.TypeOf(s4)) }

输出结果:

{   }
main.Student
&{ }
*main.Student
&{ }
*main.Student
&{ 100 200}
*main.Student
&{100 200 }
*main.Student

注意:

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

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

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

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

}

用 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. 后端程序员之路 52、A Tour of Go-2

    # flowcontrol    - for        - for i := 0; i < 10; i++ {        - for ; sum < 1000; {        ...

  2. 上百本电子书(Java/Hadoop/Spark/Linux/机器学习/)免费分享 百度云持续更新

    分享一下自己整理的超多电子书, 其中包括:Java,Hadoop,Spark,Linux,Hbase,Hive,机器学习,区块链 目录如下: 1 Java 基础 2 Java 虚拟机 3 Java 并 ...

  3. 【转载】Java泛型详解

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

  4. 剑指 Offer 50. 第一个只出现一次的字符 + 哈希表 + 有序哈希表

    剑指 Offer 50. 第一个只出现一次的字符 Offer_50 题目详情 方法一:使用无序哈希表 package com.walegarrett.offer; /** * @Author Wale ...

  5. JAVA中枚举Enum详解

    1.关键字:enum.枚举可以定义成单独的文件,也可以定义在其他类内部. 枚举在类内部的示例: public class EnumInner { public static void main(Str ...

  6. AtCoder Beginner Contest 186

    A Brick int n, m; int main() { scanf("%d%d", &n, &m); printf("%d\n", n / ...

  7. requirejs的用法

    requirejs的用法 2014年11月6日 17164次浏览 之前我的一片文章介绍过requirejs,具体地址是:http://www.haorooms.com/post/RequireJS_m ...

  8. DNA序列(JAVA语言)

    package 第三章习题; /*  * 输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量小.  * 两个等长字符串的Hamming距离等于字符不同的位置个数, ...

  9. 第一个win32程序

    vs2017下自动创建的窗口程序 // win_test.cpp : 定义应用程序的入口点. // #include "framework.h" #include "wi ...

  10. Announcing cnblogs-hardening 1.0 Preview 1

    Release Notes Write about coding Note About coding Share about coding Talk about coding Comment abou ...