Golang - 《Go语言学习笔记》
记录小白学习《Go语言学习笔记》的点点滴滴~
来自东印度的人
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《Go语言学习笔记》 - 第十一章 - 测试
Go语言拥有一套单元测试和性能测试系统,仅需要添加很少的代码就可以快速测试一段需求代码。单元测试单元测试除了用来测试逻辑算法是否符合预期外,还承担着监控代码质量的责任。Go语言工具链和标准库自带了单元测试框架,这让测试工作变得相对容易。测试代码须放在当前包以"_test.go"结尾的文件中。测试函数以Test为名称前缀。测试命令(go test)忽略以"_"或者"."开头的测试文件。正常的编译操作会忽略测试文件。比如我在cala目录下编写了一个Add()函数,我想测试一下这个函数的输出是原创 2020-05-28 14:58:54 · 297 阅读 · 0 评论 -
《Go语言学习笔记》 - 第十章 - 反射
反射能够让我们在程序的运行期间探知对象的类型信息和内存结构。比如我们用一个空接口来接收用户输入的内容,但是如果想知道用户输入内容的类型的话就只能在程序运行过程中动态的去判断,这个时候就要用到反射,反射能够在程序运行时动态的获取一个变量的类型信息和值信息。在reflect包中有两个重要的类型:Type和Value,这两个类型都具有很多定义好的方法,我们可以直接调用。Typeof在Go语言中可以通过reflect.Typeof获取任意值的类型对象,我们可以通过返回的类型对象来访问任意值的类型信息。fun原创 2020-05-28 10:24:12 · 334 阅读 · 0 评论 -
《Go语言学习笔记》 - 第九章 - 包结构
导入包使用标准库或者第三方包之前,必须使用import进行导入。有四种导入方式:import "github.com/xx/xxx" 默认方式:test.Aimport X "github.com/xx/xxx" 别名方式:X.Aimport . "github.com/xx/xxx" 简便方式:Aimport _ "github.com/xx/xxx" 初始化方式:无法引用,仅用来初始化目标包第一种是默认导入,第二种是给包起别名,第三种是简便方式,以第三种方式导入的包,在使用其内原创 2020-05-28 10:23:22 · 400 阅读 · 0 评论 -
《Go语言学习笔记》 - 第八章 - 并发
1.概念1.1什么是并发Go语言是并发语言,而不是并行语言。并发性是指**同一时间段处理多间事情的能力。**比如当你在看教学视频的时候,看到重要的知识点,你会选择暂停视频,讲知识点记录在笔记本上,然后再继续看教学视频。在这一个时间段中,你既观看了视频,又记录了笔记,这就是并发。那什么是并行呢?并行是指在同一时刻执行多个任务。比如你一边听歌一边写作业,那么在同一个时刻,你就执行了两种动作:写作业和听歌。这就是并行。画个图就更容易理解了1.2 进程、线程、协程1.2.1 进程进程是具有一定独立原创 2020-05-22 22:09:05 · 276 阅读 · 0 评论 -
《Go语言学习笔记》 - 第七章 - 接口
在Go语言中,接口是一组方法的签名。当某个类型为接口中的所有方法提供了方法的实现,它就实现了该接口。在Go语言中,接口和实现类的关系是非侵入式,也就是说一个类型要实现接口的话没必要显式的去声明自己实现了该接口,只要默默的将接口中的方法实现即可。接口区别于我们之前所有的具体类型,接口是一种抽象的类型。当你看到一个接口类型的值时,你不知道它是什么,唯一知道的是通过它的方法能做什么。语法接口的定义:type 接口名 interface{ 方法名(参数列表)返回值 ... }如果接口没有任何的原创 2020-05-16 15:07:00 · 497 阅读 · 0 评论 -
《Go语言学习笔记》 - 第六章 - 方法
Go语言不是面向对象型的语言,但是它具有面向对象语言的一些特性,比如方法。在Go语言中,方法与函数最大的差别就是方法指定了接收者,接收者可以是命名类型或者结构体类型的一个值或者是指针。在调用方法时,不管方法的接收者是什么类型,只要是该类型的值或者指针,就都能调用接收这个类型的方法。方法的定义func (t Type) methodName(parameter list)(return list) { }...原创 2020-05-16 15:02:51 · 300 阅读 · 0 评论 -
《Go语言学习笔记》 - 第五章 - 结构体
简介go语言中没有像类的概念,但是可以通过结构体struct实现oop(面向对象编程)。struct的成员(也叫属性或字段)可以是任何类型,如普通类型、复合类型、函数、map、interface、struct等,所以我们可以理解为go语言中的“类”。结构体的定义在定义结构体时应该注意大小写的问题,如果结构体的首字母大写,那么这个结构体就是公有成员(对外可见),否则就是私有成员,对外不可见。func main(){ type Student struct { name string age原创 2020-05-09 10:59:05 · 333 阅读 · 0 评论 -
《Go语言学习笔记》 - 第五章 - 字典
字典是存储键值对的、无序的集合。字典中每一个key都是唯一的,且支持相等运算符(==,!=)。,比如:数字、字符串、指针、数组、结构体、以及对应的接口类型。字典的创建字典同切片类型一样,属于引用类型,需要使用make函数或者初始化表达语句来创建。func main(){ m := make(map[string]int) m["a"] = 1 m["b"] = 2 m2 := ma...原创 2020-05-07 19:18:21 · 283 阅读 · 0 评论 -
《Go语言学习笔记》 - 第五章 - 切片
3. 切片3.1 切片的概念Go语言中切片是对数组的抽象,切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。3.2 切片的操作3.2.1 切片的创建切片的创建与数组有所不同,切片是引用类型,它的创建需要用到内置函数 make ,函数make 接受一个类型、一个长度和一个可选的容量参数。调用 make 时,内部会分配一个数组,...原创 2020-05-07 15:27:01 · 432 阅读 · 0 评论 -
《Go语言学习笔记》 - 第五章 - 数组
2. 数组2.1 相关概念数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。定义数组时,数组长度必须是非负整数,长度是类型组成部分,也就是说,元素类型相同,但长度不同的数组不属于同一类型。2.2 数组的操作2.2.1 数组的初始化数组初始化的方式较多,如果只声明数组而不初始化的话,数组默认值为对应类...原创 2020-05-07 15:26:41 · 441 阅读 · 0 评论 -
《Go语言学习笔记》 - 第五章 - 字符串
1. 字符串1.1 相关概念在Go语言中,字符串是不可变字节(byte),其本身是一个复合结构。字符串内容在初始化之后不可修改。字符串一般用双引号""或者反引号来创建。用双引号创建的字符串支持转义,但不支持多行书写;用反引号创建的字符串支持多行书写,但是不支持转义。此外,还有一个需要注意的地方,字符串的默认值为"" ,而不是"nil"。1.2 字符串操作1.2.1 字符串的创建func ...原创 2020-05-07 15:26:17 · 292 阅读 · 0 评论 -
《Go语言学习笔记》 - 第四章 - 错误处理
6. 错误处理首先我们要区分错误与异常,错误指的是在可能出现问题的地方出现了问题,而异常指的是在不应该出现问题的地方出现了问题。Go语言中,错误和异常的处理机制如下:6.1 errorGo语言中的错误处理,官方推荐的做法是返回error状态,按照惯例,error总是最后一个返回参数。标准库提供了相关的创建函数,可方便的创建包含简单错误文本的error对象。import ( "errors...原创 2020-05-07 15:37:46 · 367 阅读 · 0 评论 -
《Go语言学习笔记》 - 第四章 - 延迟调用
5. 延迟调用语句defer用来延迟一个方法或者函数的执行。被延迟的方法或者函数直到当前函数执行结束前才会被执行,因此,defer常用于资源释放、解除锁定、错误处理等操作。5.1 defer的几个注意点被defer的函数只是延迟了调用的时间,但是函数参数的传递是在代码执行到函数所在的那一行时发生的,如果函数传入的参数是一个函数,那么会立即执行。func main(){ x,y := ...原创 2020-05-07 15:40:09 · 275 阅读 · 0 评论 -
《Go语言学习笔记》 - 第四章 - 匿名函数
4. 匿名函数4.1 匿名函数的定义定义:匿名函数就是没有定义名字符号的函数。Go语言中,一般将函数的定义写在main函数的外面,在main函数内部对其进行调用,如果你只想对一个函数进行少数的调用,而又不想命名太多造成冲突,那么可以在main函数内部定义匿名函数,一边构造一边使用,形成类似的嵌套效果。匿名函数可以直接调用,也可以赋值给变量,作为函数的参数或者返回值使用。4.2 匿名函数的作...原创 2020-05-07 15:35:56 · 242 阅读 · 0 评论 -
《Go语言学习笔记》 - 第四章 - 函数
1. 函数的定义Go语言中函数的定义方式如下:func 函数名(参数1 类型1,参数2 类型2,...)(返回值1 类型1,返回值2 类型2,...){ 函数体 }但是有几个需要注意的地方:函数体的左花括号不能另起一行。函数只能判断其是否为nil,不能做其他的操作。最好写在main()函数外面,匿名函数除外。2. 函数的参数Go语言对参数的处理偏保守,不支持有默认值的可...原创 2020-05-02 22:14:28 · 206 阅读 · 0 评论 -
《Go语言学习笔记》 - 第三章 - 流程控制
3.流程控制3.1 if-else条件表达式的值必须是bool类型,可以省略括号,但是左花括号不能另起一行。支持初始化语句,可定义局部变量或者执行初始化函数,局部变量的有效范围为整个if-else语句块。func test() int{ return 1}func main() { if i := test();i > 0{ fmt.Println(i) //...原创 2020-05-07 15:30:18 · 284 阅读 · 0 评论 -
《Go语言学习笔记》 - 第三章 - 运算符和初始化
1. 运算符1.1 运算符的优先级优先级如下图所示,后缀运算符优先级最高,一元运算符优先级次之,逗号垫底。1.2 运算符注意事项在二元运算符中,除位移操作外,其余操作的操作数类型必须相同,如果其中一个是无显式声明的常量,那么该常量操作数会自动转型。func main(){ const v = 20 var a byte = 10 b := a + v fmt.Print...原创 2020-04-30 19:56:29 · 221 阅读 · 0 评论 -
《Go语言学习笔记》 - 第二章 - 类型
1. 变量在数学概念中,变量表示没有固定值且可以改变的数,在计算机系统角度,变量是 一段或者多段用来存储数据的内存 。1.1 变量的声明在Go语言中,变量的声明方法有三种:显式声明自动推导简短声明显式声明:var a inta = 10自动推导:var b = 20简短声明:c := 30需要注意的是,简短声明有一些限制,首先,简短声明只能用在函数内部,即简短...原创 2020-04-28 20:44:42 · 293 阅读 · 0 评论
分享