![](https://img-blog.csdnimg.cn/2020092316103265.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Go语言入门
文章平均质量分 87
跟着我一起从0开始学习Golang开发!
《Go语言入门》每一篇文章我会尽量编写测试用例来演示。
废话不多说。
Let's Go!
干志雄
这个作者很懒,什么都没留下…
展开
-
31《Go语言入门》共享变量的并发(互斥锁)
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中!看文章时,对照仓库中代码学习效果更佳哦!目录前言线程安全三大特性原子性可见性有序性怎么解决共享变量协程不安全的问题?使用channel解决使用互斥锁解决总结互斥锁(sync.Mutex)读写锁(sync.RWMutex)支持????前言首先我们要知道什么叫共享变量:如果一个变量在多个线程的工作内存中都存在副原创 2021-03-15 16:32:55 · 459 阅读 · 0 评论 -
30《Go语言入门》select和channel
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中!看文章时,对照仓库中代码学习效果更佳哦!目录select作用非阻塞的收发随机执行超时空select{}会引起死锁case语句中,如存在通道值为nil的读写操作,则该分支被忽略检测chan是否已满其他示例使用select生成偶数使用select生成随机数支持????selectselect能够让goroutin原创 2021-03-12 15:41:44 · 1152 阅读 · 1 评论 -
29《Go语言入门》带缓冲通道
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中!看文章时,对照仓库中代码学习效果更佳哦!目录带缓冲通道作用创建带缓冲通道示例1示例2支持????带缓冲通道带缓冲通道(buffered channel)是一种在被接收前能存储一个或多个值的通道。这类通道并不强制要求goroutine之间必须同时完成发送和接收只有在通道中没有要接收的值时,接收动作才会阻塞原创 2021-03-11 22:03:08 · 137 阅读 · 0 评论 -
28《Go语言入门》无缓冲通道
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中!看文章时,对照仓库中代码学习效果更佳哦!目录通道的种类无缓冲通道示例1示例2示例3示例4支持????通道的种类通道分为无缓冲通道和有缓冲通道。实际上,选择有缓冲通道或无缓冲通道将改变应用程序的行为和性能。区别就是创建的时候是否分配大小无缓存channelvar ch1 = make(chan ty原创 2021-03-11 13:11:17 · 253 阅读 · 0 评论 -
27《Go语言入门》单向通道(chan)
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中!看文章时,对照仓库中代码学习效果更佳哦!目录什么是单向通道声明单向通道time包中的单向通道关闭通道只读通道不能关闭给关闭通道发送数据将会触发panic从已关闭的通道接收数据时将不会发生阻塞测试题测试1支持????什么是单向通道单向通道就是只能用于写入或读取数据的通道。它是对通道的一种使用限制。如果ch原创 2021-03-09 18:25:20 · 1227 阅读 · 1 评论 -
26《Go语言入门》并发编程chan — goroutine之间通信的管道
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中!在看文章的时候,对照仓库中代码学习效果更佳哦!目录前言共享数据消息通信机制chanchan的特性声明chan创建chan使用chan发送数据使用chan接收数据chan接收的特性chan接收的写法1、阻塞接收数据2、非阻塞接收数据3、阻塞接收任意数据,忽略接收的数据前言并发编程的难度在于协调,而协调就要通过交原创 2021-03-08 11:36:51 · 216 阅读 · 0 评论 -
24《Go语言入门》并发编程goroutine和WaitGroup
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录goroutine使用普通函数创建goroutine示例1:示例2:使用匿名函数创建goroutine支持????goroutinegoroutine就是协程goroutine是Go并行设计的核心。协程比线程更小,十几个原创 2021-03-06 23:11:59 · 537 阅读 · 0 评论 -
25《Go语言入门》并发和并行
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录并发和并行的区别Go中的并发和并行并发和并行的区别并发(concurrency):把任务在不同时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。并行(parallelism):把每一个任务分配给每一个处理器独立原创 2021-03-06 22:29:20 · 184 阅读 · 0 评论 -
23《Go语言入门》进程、线程、协程
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录进程线程任务调度进程和线程的区别多线程和多核内核线程超线程技术协程协程的目的协程的特点协程的原理线程和协程的比较支持????在学习并发编程前,我们需要了解以下概念。进程进程是一个具有一定独立功能的程序在一个数据集上的一次原创 2021-03-06 15:13:32 · 364 阅读 · 0 评论 -
22《Go语言入门》类型断言
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录类型断言推荐语法简化语法配合switch使用示例1示例2nil接口变量无论断言什么类型都会失败判断接口值是否有某一个或多个方法?如何判断一个非接口值的变量是否是某个类型呢?总结支持????类型断言类型断言(Type Asser原创 2021-03-05 17:00:02 · 424 阅读 · 1 评论 -
21《Go语言入门》interface底层浅分析
interface的结构前面文章空接口和非空接口,它们都属于接口,空接口底层是由runtime.eface结构体实现,而非空接口底层是由runtime.iface结构体实现。#mermaid-svg-BmZlEd8lIsIM6Dtm .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-BmZlEd8lIsIM6D原创 2021-03-04 13:01:40 · 347 阅读 · 2 评论 -
20《Go语言入门》细讲interface和nil
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录前言nil是预定义的标识符默认值nil相同类型的nil值可能无法比较,不同类型的nil值不能比较判断interface是否为nil的一个坑interface类型和nil比较的应用场景面对这个坑,如何判断interface里面的值是原创 2021-03-02 16:37:12 · 377 阅读 · 0 评论 -
19《Go语言入门》interface和interface{}、interface和pointer
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录interface{}interface{} 类型不是任意类型[]interface{}是元素是interface{}的sliceinterface和pointer支持????interface{}上一章18《Go语言入门》非原创 2021-02-28 23:57:14 · 424 阅读 · 0 评论 -
18《Go语言入门》非侵入式接口(interface)
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录什么是接口其它编程语言中的接口Go的接口特征非侵入式设计好处坏处接口声明(定义)常见接口写法实现接口的条件类型与接口的关系支持????什么是接口接口本身是调用方和实现方均需遵守的一种协议,大家按照统一的方法命名、参数类型和数量原创 2021-02-26 18:47:54 · 542 阅读 · 0 评论 -
17《Go语言入门》面向对象和结构体
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录Go是不是面向对象编程语言?Go的类(class)结构体定义实例化结构体初始化结构体使用“键值对”初始化结构体使用多个值的列表初始化结构体结构体成员只能包含结构体的指针类型使用结构体的指针作为函数参数支持????Go是不是面向对原创 2021-02-25 16:15:59 · 273 阅读 · 0 评论 -
16《Go语言入门》函数可变参数和defer
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录可变参数函数可变参数传递的两种方式方式一参数以逗号分隔方式二使用`...`运算符注意示例defer(延迟执行语句)多个延迟执行语句的处理顺序在宕机时触发延迟执行语句在函数退出时触发延迟执行语句释放资源1、使用延迟并发解锁2、使用延原创 2021-02-25 00:32:40 · 771 阅读 · 0 评论 -
15《Go语言入门》函数及函数式编程
目录函数定义函数调用函数特点函数可以有多个返回值函数所有参数都是值传递指针也是值传递支持函数式编程函数式编程定义函数式编程使用函数定义func function_name( [parameter list] ) [return_types] { 函数体}函数调用下面测试求最大值函数:func TestMax(t *testing.T) { var a = 100 var b = 200 var ret = max(a, b) // 注意:测试用例中使用t.Log和t.Logf原创 2021-02-24 12:18:04 · 237 阅读 · 0 评论 -
14《Go语言入门》字符串、Unicode和UTF-8以及strings和strconv包
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????!文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。在看文章的时候,对照仓库中代码学习效果更佳!目录字符串string是值类型string初始化为默认零值,为空字符串string是只读的byte slicelen函数是获取包含的byte数string的byte数组可以存放任何数据如何获取单个字符?Unicode和UTF-8str原创 2021-01-25 17:48:14 · 551 阅读 · 0 评论 -
13《Go语言入门》Map实现工厂模式和Set集合
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????。文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。目录Map实现工厂模式Map实现Set集合支持????Map实现工厂模式工厂模式(Factory Pattern)是 编程语言 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式意图:定义一个创建对象的接口,让其子类自原创 2021-01-22 15:54:03 · 384 阅读 · 0 评论 -
12《Go语言入门》Map声明、添加删除访问元素、遍历及排序
12《Go语言入门》Map声明、添加删除访问元素、遍历及排序原创 2021-01-21 17:23:44 · 1417 阅读 · 0 评论 -
11《Go语言入门》数组和切片
本文讲解了Go中连续存储空间数组和切片。讲解了数组的创建、遍历方式以及截取数组。切片在Go中很重要,因此我们需要知道它的内部结构,切片就是一个结构体构成,该结构体有个capacity元素,capacity决定了切片占用的内存,因此我们需要了解capacity的增长规则。切片是一个共享存储结构,它其实就是我们常说的引用类型。最后对数组和切片做了一个简单的比较。原创 2021-01-19 17:50:27 · 262 阅读 · 0 评论 -
10《Go语言入门》循环和条件
这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会????,此处应有掌声????????????。文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。目录循环for循环while循环while条件循环while无限循环示例条件if条件switch条件支持????循环for循环Go仅支持循环关键字for下面为for循环常用的写法,注意Go中for循环是不用写括号的,写了括号则会报错。for i := 0; i<原创 2021-01-12 16:04:51 · 301 阅读 · 0 评论 -
09《Go语言入门》运算符和其他编程语言的区别
目录算术运算符无前置自增和前置自减比较运算符数组的比较逻辑运算符位运算符按位置零运算符算术运算符编程语言中常用的运算符为:+-*/% // 求余++ // 自增-- // 自减自增又分为前置自增和后置自增;自减又分为前置自减和后置自减。很多人在学习C语言的时候就经常分不清前置和后置的区别。无前置自增和前置自减而Go为了简单,只支持后置自增(a++)和后置自减(a–)func TestIncrementDecrement(t *testing.T) { a := 1 a++原创 2021-01-12 00:41:29 · 165 阅读 · 0 评论 -
08《Go语言入门》数据类型、类型转换、指针类型
目录基本数据类型数字类型整形无符号整形有符号整形浮点型类型转换数据范围指针类型基本数据类型Go语言的基本数据类型分别是:布尔型、数字类型、字符串类型我比较喜欢以表格的形式展示,所以我会尽可能用到表格类型描述布尔型布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。数字类型整型 int 和浮点型 float32、float64,并且支持复数,其中位的运算采用补码。字符串是一串固定长度的字符连接起来的字符序列。原创 2021-01-09 21:10:41 · 657 阅读 · 0 评论 -
07《Go语言入门》测试用例、变量和常量
目录测试用例变量定义单个变量定义多个变量斐波拉契数列交换两个变量的值常量枚举常量表达式iota常量考察测试用例在开始讲解变量和常量之前,先简单讲下Go测试程序如何编写。在Go中对测试程序作了如下规定:Go文件名以_test结尾,如:my_test.go测试方法名以Test开头,如:func TestMy(t *testing.T)例如下图所示命令行中运行请使用go test -v xxx_test.go不能使用go run xxx_test.go,这个问题在03《Go语言入门》GoPa原创 2021-01-06 15:51:58 · 186 阅读 · 0 评论 -
06《Go语言入门》Go程序结构、入口、退出返回值及获取命令函参数
目录Go程序结构程序入口退出返回值获取命令行传参支持????Go程序结构一个基本的Go程序代码由三部分构成:包引入依赖main函数程序入口// 包,表明代码所在的模块(包)package main// 引入代码依赖// IDE会自动导入包,所以可以直接使用fmt,而不需要写下面代码import "fmt" // 程序入口,功能实现func main() { fmt.Println("Start") fmt.Println("Hello, World!") fmt.Pri原创 2021-01-05 16:01:41 · 715 阅读 · 0 评论 -
05《Go语言入门》使用GoLand创建、运行和调试Hello, World程序
目录Go语言开发用什么IDE使用GoLand创建Hello, WorldRunDebugRun/Debug 快捷键Go语言开发用什么IDEGo语言开发能使用的IDE可多了,如Eclipse、VSCode、Atom等,甚至有不少Gopher使用Vim。但是,我还是建议初学者使用GoLand作为Go语言开发的IDE,理由很简单,其他IDE需要安装Go插件,GoLand开箱即用,且功能更强大。唯一缺点就是使用GoLand需要付费。虽然网上有需要共享的License或破解方法,但是还是推荐大家使用正版。J原创 2021-01-05 13:38:53 · 865 阅读 · 0 评论 -
04《Go语言入门》Go常用命令介绍
目录go rungo buildgo getgo installgo envgo vetGo提供了很多命令,我们可以通过在终端输入go回车,即可看到go run编译并执行,只能作用于命令源码文件,一般用于开发中快速测试。如go run test.gogo build编译代码包或源码文件。如果带上包名,表示编译指定的代码包如果带上源码文件,表示编译指定源码文件go get下载第三方代码包并编译安装。它会下载安装到GOPATH环境变量配置的第一个工作区中。如上文03 | GoPat原创 2021-01-04 18:14:42 · 210 阅读 · 0 评论 -
03《Go语言入门》GoPath 和 GoRoot简介
目录Hello World程序的过程是怎样的?GoPath和GoRootGoRootGoPath引用GitHub上的包Hello World程序的过程是怎样的?通过上一篇文章,我们编写了第一个Go程序,那么这个代码过程又是怎样的呢?这里还是把代码再贴出来:package mainimport "fmt"func main() { fmt.Println("Hello, World!")}第一行代码:建立一个名为main的package,这里的package和Java里面的packa原创 2020-12-30 16:22:26 · 560 阅读 · 0 评论 -
02《Go语言入门》编写第一个Go程序“Hello, World!”
目录环境安装下载安装包编写Hello World环境安装下载安装包进入Golang官网https://golang.org/ 需要科学上网https://golang.google.cn/无法科学上网的请访问这个下载安装包安装macOS安装如果下载的是pkg文件,则直接双击运行安装;如果下载的是tar.gz压缩文件,则按照Linux安装步骤进行安装。Linux安装①、 在终端将包解压到/usr/local目录下tar -C /usr/local -xzf 压缩包文原创 2020-12-30 15:00:10 · 241 阅读 · 0 评论 -
01《Go语言入门》Go语言简介:历史背景、发展现状及语言特性
目录历史背景为Google内部挑战而设计2007年9开始设计2009年11月正式推出2016最佳语言语言特性简单高效生产力发展现状云计算语言区块链语言注意:本文只是简介Go语言历史背景为Google内部挑战而设计Go语言最开始的设计是为了解决Google内部面临的一些挑战而诞生的。这些挑战就包括如下:多核硬件架构超大规模分布式计算集群Web模式导致的前所未有的开发规模和更新速度2007年9开始设计罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)原创 2020-12-29 18:39:55 · 398 阅读 · 0 评论 -
Golang语言现状优缺全面分析
本文将对Golang语言现状优缺点全面分析,主要包括Go语言的优势、强项、成就、缺点。原创 2020-08-06 12:41:57 · 1045 阅读 · 0 评论