一、 结构体(struct)
1、结构体定义
type identifier struct {field1 type1field2 type2...
}

声明:new(Type) 和 &Type{}是等价的

2、初始化结构体
type Interval struct {start intend   int
}

初始化方式:

intr := Interval{0, 3}            (A)
intr := Interval{end:5, start:1}  (B)
intr := Interval{end:5}           (C)
3、 使用工厂方法创建结构体
type matrix struct {...
}func NewMatrix(params) *matrix {m := new(matrix) // 初始化 mreturn m
}

在其他包里使用工厂方法:

package main
import "matrix"
...
wrong := new(matrix.matrix)     // 编译失败(matrix包中的matrix结构体小写 是私有的)
right := matrix.NewMatrix(...)  // 实例化 matrix 的唯一方式

注意:试图 make() 一个结构体变量,会引发一个编译错误

4、 带标签的结构体

结构体中的字段除了有名字和类型外,还可以有一个可选的标签(tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。
标签的内容不可以在一般的编程中使用,只有包 reflect 能获取它。

例子:

package mainimport ("fmt""reflect"
)type TagType struct { // tagsfield1 bool   "An important answer"field2 string "The name of the thing"field3 int    "How much there are"
}func main() {tt := TagType{true, "Barak Obama", 1}for i := 0; i < 3; i++ {refTag(tt, i)}
}func refTag(tt TagType, ix int) {ttType := reflect.TypeOf(tt)ixField := ttType.Field(ix)fmt.Printf("%v\n", ixField.Tag)
}

输出:

An important answer
The name of the thing
How much there are
5| 匿名字段和内嵌结构体

结构体可以包含一个或多个 匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型就是字段的名字。
匿名字段本身可以是一个结构体类型,即 结构体可以包含内嵌结构体。
在一个结构体中对于每一种数据类型只能有一个匿名字段。

二、方法(method)

Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数。
接收者类型可以是(几乎)任何类型,不仅仅是结构体类型:任何类型都可以有方法,甚至可以是函数类型,可以是 int、bool、string 或数组的别名类型。
但是接收者不能是一个接口类型(参考 第 11 章),因为接口是一个抽象定义,但是方法却是具体实现;
如果这样做会引发一个编译错误:invalid receiver type…。

方法的格式:
func (recv receiver_type) methodName(parameter_list) (return_value_list) { … }
func (_ receiver_type) methodName(parameter_list) (return_value_list) { … }

函数和方法的区别
函数将变量作为参数:Function1(recv)
方法在变量上被调用:recv.Method1()

【Go】Go基础(八):结构体和方法相关推荐

  1. Go语言基础之结构体

    转载地址:https://www.liwenzhou.com/posts/Go/10_struct/ Go语言中没有"类"的概念,也不支持"类"的继承等面向对象 ...

  2. 10.Go语言基础之结构体

    Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 ...

  3. 【Go】语法基础之结构体

    结构体的定义很简单: type Vertex struct {X, Y float64 } 可以理解为多个变量的集合. 结构体的使用: 1.直接使用: v := Vertex{1, 2} 或 var ...

  4. c语言程序设计实验8,C语言程序设计实验八结构体.doc

    C语言程序设计实验八结构体 C语言程序设计实验八:结构体 请求用户输入若干个学生的基本情况,其中包括每位学生的学号.姓名和两门课(C语言.数学)的成绩.然后用下面的格式输出学生的成绩列表. 格式描述如 ...

  5. 005 GO-高级数据类型(结构体和方法)

    005 GO-高级数据类型(结构体和方法) http://note.youdao.com/noteshare?id=864cc29d2ca6082949d875280f3f5448&sub=D ...

  6. c++ 结构体初始化_【干货】c语言基础语法——结构体

    1.关于C语言结构体的引入 学习环境搭建1_Linux C语言_嵌入式开发工程师-创客学院​www.makeru.com.cn 在实际问题中有时候我们需要几种数据类型一起来修饰某个变量. 例如一个学生 ...

  7. Go 存储基础 — 内存结构体怎么写入文件?

    作者 | 奇伢       责编 | 欧阳姝黎 概述 讲了那么多存储的通用知识,从 Linux 的文件系统,块层,再到磁盘,都做了一些深入的分享.今天分享一个 Go 编程的使用技巧:怎么把内存的结构体 ...

  8. c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针

    指针基础 一 指针就是地址,地址就是指针.指针存储的是内存的地址. 二 指针的定义 1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf( ...

  9. 从零开发区块链应用(八)--结构体初识

    文章目录 一.结构体定义 二.初始化结构体 三.结构体的访问 四.结构体指针 五.结构体可见性 六.结构体标签 七.结构体嵌套 八.结构体方法 九.结构体特性 Go语言中提供了对struct的支持,s ...

最新文章

  1. 送书 | 2020年新一天,用这本书开启你的NLP学习之路!
  2. maven不能拉取私服的原因
  3. C3P0 释放连接 的问题
  4. LightOJ 1393 Crazy Calendar(博弈)题解
  5. 将任何变量的值进行二进制输出的方法
  6. 深度学习之激活函数详解
  7. 在Mac上如何管理添加,删除和延迟启动项
  8. Springboot项目中static文件和templates文件的区别
  9. SPSS 27 发布了!我为什么要在两个月前买SPSS?为什么?为什么?为什么?
  10. 全国计算机建模三等奖,喜报 | 建院学子喜获2019年第十三届全国大学生结构设计竞赛三等奖...
  11. 电脑键盘灯光的调节方法
  12. 小白如何做一个Python人工智能语音助手
  13. PyCharm自定义背景图片、更换主题
  14. 奇趣携Red Bend推空中下载软件控件管理
  15. 网页数据提取----网络投票软件开发
  16. 腾讯晋升不再直接加薪;苹果回应系统偷跑流量:建议恢复出厂设置;全球科技公司 5 月裁员 1.68 万人 | EA周报...
  17. h5 vue利用canvas实现手机签名并且可旋转功能
  18. python crc16-ccitt
  19. docker 磁盘满了问题排查
  20. 研华运动控制卡接线图_ADVANTECH研华PCI-1245S运动控制卡4轴DSP架构脉冲型 步进/伺服电机SCARA控制通用PCI卡...

热门文章

  1. Yolo(2)Yolo v2
  2. 【opencv】(13) 案例:停车场空余车位检测,附python完整代码
  3. 你知道吗?Linux命令竟如此简单!
  4. C++ 中NULL 和 nullptr 的区别
  5. 在Substance Designer中创建砖墙视频教程
  6. 编译内核指定模块,筛选当前模块依赖的组件
  7. C++多线程:互斥变量 std::mutex
  8. (四)Asp.net web api中的坑-【api的返回值】
  9. Django 数据库
  10. 车辆匹配和平均车速计算