Golang官方称Go语言的语法相对Java语言而言要简洁很多,但是简洁背后也灵活了很多,所以很多看似很简单的代码上的细节稍不注意就会产生坑。本文主要对struct结构体的相关的语法进行总结和说明。

结构体类型的声明:

type user struct {name    stringemail    string
}func (u user) notify() {fmt.Println("nitity...",u.name,u.email)}func (u *user) changeEmail(email string) {   //这里的方法在被调用时,user传入的是调用者的指针u.email = email}e

结构体变量的赋值和初始化:

func main()  {//直接使用批针的方式u1 := new(user)  //此时无法对u1进行初始化赋值u1.changeEmail("u1@email.com")  //只能通过user的方法进行赋值
    u1.notify()//方式同上var u2 *useru2= new(user) //使用new函数返回的是其参数类型的指针u2.changeEmail("u2@email.com")u2.notify()var u3 user  //当声明变量时,这个变量对应的值总是会被初始化。这个值要么用指定的值初始化,要么用零值(即变量类型的默认值)做初始化u3.changeEmail("u3@email.com")u3.notify()//上面的方式只是起演示作用,在某些场合可以使用//下面两种方式是建议采用的方式  
    bill := user{"Bill","bill@email.com"}   //声明一个变量并初始化
    bill.notify()lisa:=&user{"Lisa","lisa@email.com"}lisa.notify()    // 在这里Go会在底层这样做:(*lisa).notifybill.changeEmail("huxin@tedu.com")  //这里Go底层会 (&bill).changeEmail("huxin@tedu.com")bill.notify()lisa.changeEmail("lisa@newdomain.com")lisa.notify()}g

说明一下:关键字func和函数名之间的参数被称为接收者,Go语言里有两种类型的接收者:值接收者和指针接收者,上面的notify方法的声明使用的是值接收者,changeEmail方法使用的是指针接收者,Go语言为了我们使用上的简单,在实 际执行时会根据我们传的值或指针自动帮我们进行转换以适应方法的需要。

还需要注意:

在Go语言中,所有的变量都以值的方式传递。因为指针变量的值是所指向的内存地址,在函数间传递指针变量,是在传递这个地址值,所以依旧被看作以值的方式在传递。

 

转载于:https://www.cnblogs.com/hzhuxin/p/9210222.html

Go语言中的结构体 (struct)相关推荐

  1. C语言中的结构体——struct

    结构体是C语言中很重要的知识点,结构体使得C语言有能力去描述复杂类型.         我们知道C语言中有许多类型,如:int.char.double······,但是现实世界中存在很多复杂的对象,不 ...

  2. 关于C语言中的结构体所占的字节数 sizeof(struct)

    C语言中的结构体所占的字节数 ,用sizeof求一个结构体的大小 C语言中用sizeof求结构体所占字节数的详细方法. 一.非嵌套结构体 struct one{char a; // 1(char所占字 ...

  3. C语言中的结构体,结构体中数组初始化与赋值

    最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...

  4. Linux结构体变量报错,C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  5. c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)

    前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...

  6. C语言中对结构体排序

    在C语言中对结构体排序 用qsort()函数进行排序, qsort()里面要传入4个参数–qsort(数组名,数组长度,sizeof(),排序方法) 实验9-5 查找书籍 (20分) 给定n本书的名称 ...

  7. C语言中的结构体定义和使用例子

    C语言中的结构体定义和使用例子 一.结构体定义的三种方式 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对 问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共 ...

  8. X86汇编中的结构体STRUCT和UNION

    X86汇编中的结构体STRUCT和UNION 结构的定义 ; 定义名为Person的结构体 Person STRUCTidNum byte "000000"lastName byt ...

  9. 成员变量隐藏c语言,C语言中隐藏结构体的细节

    我们都知道,在C语言中,结构体中的字段都是可以访问的.或者说,在C++ 中,类和结构体的主要区别就是类中成员变量默认为private,而结构体中默认为public.结构体的这一个特性,导致结构体中封装 ...

最新文章

  1. PyTorch 笔记(11)— Tensor内部存储结构(头信息区 Tensor,存储区 Storage)
  2. CSR8670的A2DP与AVRCP的应用笔记
  3. 尊重对手就是对自己最好的尊重
  4. Insertion Sort List
  5. Attention To, Convert To Capped Collection
  6. 数梦工场助力云计算国标制定
  7. 附录:MySQL忘记root密码
  8. mongodb插入时,时间差的问题
  9. J2EE代码存档--导出Excel
  10. Jmeter 常用断言使用
  11. 大数据分析需注意哪些问题
  12. 25%的CPU利用率也能够让一台笔记本如此狼狈 (小红伞)
  13. 2021年6月23日,我们毕业啦!!!
  14. Matplotlib:初学者绕不开的库,详解50种常用可视化图表!
  15. GNU autotools 下载和安装
  16. 我们公司财务不接受电子发票纸质打印报销,这合理吗?
  17. 星起航:商品上架完成后抖音店铺该如何运营呢?
  18. Python爬取京东:价格、商品ID、标题、评价、店名、是否自营
  19. 题目:请写一段将正整数转化为四进制字符串的函数(十进制正整数转四进制字符串)
  20. 向下兼容性格什么意思_恭喜你,被向下兼容了|有启发

热门文章

  1. 开发一个手游需要的工种
  2. .net环境下ckeditor与ckfinder中文文件链接乱码的问题
  3. Windows 底层驱动级 Anti-Rootkit 工具 ScDetective 源代码
  4. DXperience 6.3.9 for Visual Studio 2002, 2003
  5. 影响机器视觉检测系统不稳定性因素分析
  6. Anaconda python安装使用
  7. Linux主机SSH免密码登录设置
  8. 【强烈推荐】蒋勋细说《红楼梦》
  9. 问题三十:《Ray Tracing In One Weekend》封面图形生成
  10. Java基础知识小杂库