Go语言-接口
第 13 章在 Go 语言中, 接口 就是方法签名(Method Signature)的集合。在面向对象的领域里,接口定义一个对象的行为,接口只指定了对象应该做什么,至于如何实现这个行为,则由对象本身去确定。当一个类型实现了接口中的所有方法,我们称它实现了该接口。接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法。
13.1 接口的定义使用 type 关键字可以定义接口:
123type interface_name interface { method()}
13.2 接口的实现创建类型或者结构体,并为其绑定接口定义的方法,接收者为该类型或结构体,方法名为接口中定义的方法名,这样就说该类型或者结构体实现了该接口。例如:
1234567891011121314151617181920212223package mainimport "fmt"type Study interface { learn()}type Student struct { name string}fu ...
Go语言-方法
第 12 章 方法方法 其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。
12func (t Type) methodName(parameterList) returnList{}
上面的代码片段创建了一个接收器类型为 Type 的方法 methodName 。
12.1 实例绑定123456789101112131415161718192021222324package mainimport "fmt"// Lesson 定义一个名为 Lesson 的结构体type Lesson struct { Name string Target string}// PrintInfo 定义一个与 Lesson 的绑定的方法func (lesson Lesson) PrintInfo() { fmt.Println("name:", lesson.Name) fmt.P ...
Go语言-流程控制
11. 流程控制所谓流程控制就是指“程序怎么执行”或者说“程序执行的顺序”。程序整体上确实是从上往下执行,但又不单纯是从上往下。流程控制可分为三类:
顺序执行。这个非常简单,就是先执行第一行再执行第二行……这样依次从上往下执行。
选择执行。有些代码可以跳过不执行,有选择地执行某些代码。
循环执行。有些代码会反复执行。
11.1 条件语句在 Go 中 条件语句模型 如下:
123456789if 条件1 { 逻辑代码1} else if 条件2 { 逻辑代码2} else if 条件 ... { 逻辑代码 ...} else { 逻辑代码 else}
如果分支的 condition 为真,则执行该分支 { 和 } 之间的代码。在 Go 中,对于 { 和 } 的位置有严格的要求,它要求 else if (或 else ) 和两边的花括号,必须在同一行。特别注意,即使在 { 和 } 之间只有一条语句,这两个花括号也是不能省略的。
单分支 ...
Go语言-包
第 10 章 包包(package) 用于组织 Go 源代码,提供了更好的可重用性与可读性。Go 语言有超过 100 个的标准包,可以用 go list std | wc -l 命令查看标准包的具体数目,标准库为大多数的程序提供了必要的基础组件。
10.1 main 包首先,我们先来看看 main 包,该包中包含一个 main() 函数,该函数是程序运行的入口。
package packagename 代码指定了某一源文件属于某一个包。它应该放在每一个源文件的第一行。例如我们 Go 的第一个程序。
12345678// hello gopackage mainimport "fmt"func main() { fmt.Println("《Go语言极简一本通》")}
package main 这一行指定该文件属于 main 包。import "fmt" 语句用于导入一个已存在的名为 fmt 的包。
10.2 创建包下面我们创建自定义的 book 包,其中,属于某一个包的源文件都应该放置于一个单独命名的 ...
Go语言-函数
第 9 章 函数函数 是基于功能或逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。由于 Go 语言是编译型语言,所以函数编写的顺序是无关紧要的。
9.1 函数的声明在 Go 语言中,函数声明语法如下:
123func function_name(parameter_list) (result_list) { //函数体}
函数的声明使用 func 关键词,后面依次接 function_name(函数名) , parameter_list(参数列表) , result_list(返回值列表) 以及 函数体 。
形式参数列表:函数的参数名以及参数类型,这些参数作为局部变量,其值由参数调用者提供,函数中的参数列表和返回值并非是必须的。
返回值列表:函数返回值的变量名以及类型,如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。
如果有连续若干个参数的类型一致,那么只需在最后一个参数后添加该类型。
123456789101112131415161718192021222 ...
Go语言-结构体
第 8 章 结构体结构体(struct) 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。学过 C 或 C++ 的人都知道结构体,但在 Go 中,没有像 C++ 中的 class 类的概念,只有 struct 结构体的概念,所以也没有继承。
8.1 结构体的声明在 Go 语言 中使用下面的语法是对结构体的声明。
12345type struct_name struct { attribute_name1 attribute_type attribute_name2 attribute_type ...}
例如下面是定义一个名为 Lesson(课程) 的结构体。
12345type Lesson struct { name string //名称 target string //学习目标 spend int //学习花费时间}
上面的代码声明了一个结构体类型 Lesson ,它有 name 、 target 和 spend 三个属性。可以把相同类型的属性声明在同一行,这 ...
Go语言-指针
第 7 章 指针指针也是一种类型,也可以创建变量,称之为指针变量。指针变量的类型为 *Type,该指针指向一个 Type 类型的变量。指针变量最大的特点就是存储的某个实际变量的内存地址,通过记录某个变量的地址,从而间接的操作该变量。
7.1 创建指针创建指针有三种方法。
首先定义普通变量,再通过获取该普通变量的地址创建指针:
1234// 定义普通变量 xx := "面向加薪学习"// 取普通变量 x 的地址创建指针 pptr := &x
先创建指针并分配好内存,再给指针指向的内存地址写入对应的值:
123456// 创建指针ptr2 := new(string)// 给指针指向的内存地址写入对应的值*ptr2 = "从0到Go语言微服务架构师"fmt.Println(ptr2)fmt.Println(*ptr2)
首先声明一个指针变量,再从其他变量获取内存地址给指针变量:
1234567// 定义变量 x2x2 := "Go语言微服务架构师核心22讲"// 声明指针变量var p *string// 指针初始 ...
Go语言-容器类型
第 6 章 容器类型6.1 数组数组 是一个由 固定长度 的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,因此在 Go 语言中很少直接使用数组。和数组对应的类型是 slice(切片) ,它是可以动态的增长和收缩的序列, slice 功能也更灵活,下面我们再讨论 slice 。
6.1.1 数组声明可以使用 [n]Type 来声明一个数组。其中 n 表示数组中元素的数量, Type 表示每个元素的类型。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package mainimport "fmt"func test01() { // 声明时没有指定数组元素的值, 默认为零值 var arr [5]int fmt.Println(arr) arr[0] = 1 arr[1] = 2 arr[2] = 3 fmt.Println(arr)}fu ...
Go语言-基本数据类型
第 5 章 基础数据类型在静态类型语言(C++/Java/Golang 等)中规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。
5.1 整形整型分两大类
有符号整型:int8、int16、int32、int64、int。
无符号整型:uint8、uint16、uint32、uint64、uint。
类型
取值范围
int8
[-128 , 127]
int16
[-32768 , 32767]
int32
[-2147483648 , 2147483647] Go语言中没有字符类型,所有字符都使用int32存储
int64
[-9223372036854775808 , 9223372036854775807]
int
受限于计算机系统,系统是多少位,int为多少位
uint8
[0 , 255]
uint16
[0 , 65535]
uint32
[0 , 4294967295]
uint64
[0 , 18446744073709551615]
uint
受限于计算机系统,系统 ...
Go语言-变量与常量
第 4 章 变量与常量4.1 变量作用:给一段指定的内存空间起名,方便操作这段内存。
声明变量的一般形式是使用 var 关键字。
方法一:声明一个变量, 默认的值是 0
12345678910package mainimport "fmt"func main(){ // 方法一:声明一个变量, 默认的值是0 var a int fmt.Println("a = ", a) fmt.Printf("a的类型是: %T\n", a)}
方法二:声明一个变量, 并初始化一个值
123456789101112package mainimport "fmt"func main(){ // 方法二:声明一个变量, 初始化一个值 var b int = 100 fmt.Printf("b = %d, type of b = %T\n", b, b) var bb string = "从0到Go语言微服务架构师& ...