Go语言核心36讲15---结构体】的更多相关文章

14 | 接口类型的合理运用 前导内容:正确使用接口的基础知识 在 Go 语言的语境中,当我们在谈论"接口"的时候,一定指的是接口类型.因为接口类型与其他数据类型不同,它是没法被实例化的. 更具体地说,我们既不能通过调用new函数或make函数创建出一个接口类型的值,也无法用字面量来表示一个接口类型的值. 对于某一个接口类型来说,如果没有任何数据类型可以作为它的实现,那么该接口的值就不可能存在. 我已经在前面展示过,通过关键字type和interface,我们可以声明出接口类型. 接口…
15 | 关于指针的有限操作 在前面的文章中,我们已经提到过很多次"指针"了,你应该已经比较熟悉了.不过,我们那时大多指的是指针类型及其对应的指针值,今天我们讲的则是更为深入的内容. 让我们先来复习一下. type Dog struct { name string } func (dog *Dog) SetName(name string) { dog.name = name } 对于基本类型Dog来说,*Dog就是它的指针类型.而对于一个Dog类型,值不为nil的变量dog,取址表达…
26 | sync.Mutex与sync.RWMutex 从本篇文章开始,我们将一起探讨 Go 语言自带标准库中一些比较核心的代码包.这会涉及这些代码包的标准用法.使用禁忌.背后原理以及周边的知识. 既然 Go 语言是以独特的并发编程模型傲视群雄的语言,那么我们就先来学习与并发编程关系最紧密的代码包. 前导内容: 竞态条件.临界区与同步工具 我们首先要看的就是sync包.这里的"sync"的中文意思是"同步".我们下面就从同步讲起. 相比于 Go 语言宣扬的&quo…
36 | unicode与字符编码 在开始今天的内容之前,我先来做一个简单的总结. Go 语言经典知识总结 在数据类型方面有: 基于底层数组的切片: 用来传递数据的通道: 作为一等类型的函数: 可实现面向对象的结构体: 能无侵入实现的接口等. 在语法方面有: 异步编程神器go语句: 函数的最后关卡defer语句: 可做类型判断的switch语句: 多通道操作利器select语句: 非常有特色的异常处理函数panic和recover. 除了这些,我们还一起讨论了测试 Go 程序的主要方式.这涉及了…
46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. socket,常被翻译为套接字,它应该算是网络编程世界中最为核心的知识之一了.关于 socket,我们可以讨论的东西太多了,因此,我在这里只围绕着 Go 语言向你介绍一些关于它的基础知识. 所谓 socket,是一种 IPC 方法.IPC 是 Inter-Process Communication 的…
03 | 库源码文件 在我的定义中,库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话). 这里的"其他代码"可以与被使用的程序实体在同一个源码文件内,也可以在其他源码文件,甚至其他代码包中. 那么程序实体是什么呢?在 Go 语言中,程序实体是变量.常量.函数.结构体和接口的统称.我们总是会先声明(或者说定义)程序实体,然后再去使用. 比如在上一篇的例子中,我们先定义了变量name,然后在main函数中调用fmt.P…
06 | 程序实体的那些事儿 (下) 在上一篇文章,我们一直都在围绕着可重名变量,也就是不同代码块中的重名变量,进行了讨论.还记得吗? 最后我强调,如果可重名变量的类型不同,那么就需要引起我们的特别关注了,它们之间可能会存在"屏蔽"的现象. 必要时,我们需要严格地检查它们的类型,但是怎样检查呢?咱们现在就说. 我今天的问题是:怎样判断一个变量的类型? 我们依然以在上一篇文章中展示过的 demo11.go 为基础. package main import "fmt"…
07 | 数组和切片 我们这次主要讨论 Go 语言的数组(array)类型和切片(slice)类型. 它们的共同点是都属于集合类的类型,并且,它们的值也都可以用来存储某一种类型的值(或者说元素). 不过,它们最重要的不同是:数组类型的值(以下简称数组)的长度是固定的,而切片类型的值(以下简称切片)是可变长的. 数组的长度在声明它的时候就必须给定,并且之后不会再改变.可以说,数组的长度是其类型的一部分.比如,[1]string和[2]string就是两个不同的数组类型. 而切片的类型字面量中只有元…
09 | 字典的操作和约束 至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天要讲的字典(map)却不同,它能存储的不是单一值的集合,而是键值对的集合. 在 Go 语言规范中,应该是为了避免歧义,他们将键值对换了一种称呼,叫做:"键 - 元素对".我们也沿用这个看起来更加清晰的词来讲解. 知识前导:为什么字典的键类型会受到约束? Go 语言的字典类型其实是一个哈希表…
13 | 结构体及其方法的使用法门 我们都知道,结构体类型表示的是实实在在的数据结构.一个结构体类型可以包含若干个字段,每个字段通常都需要有确切的名字和类型. 前导内容:结构体类型基础知识 当然了,结构体类型也可以不包含任何字段,这样并不是没有意义的,因为我们还可以为类型关联上一些方法,这里你可以把方法看做是函数的特殊版本. 函数是独立的程序实体.我们可以声明有名字的函数,也可以声明没名字的函数,还可以把它们当做普通的值传来传去.我们能把具有相同签名的函数抽象成独立的函数类型,以作为一组输入.输…