
认真学Go
是基于Go By Example进行个人总结,学习请看原网址https://gobyexample.com/
Huthan
志不求易者成,事不避难者进!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Go学习笔记—原子计算器
Go学习笔记—原子计算器、互斥锁、Go状态协程1、原子计算器atomic-counters状态管理方式除了通过通道间的沟通完成,还可以使用原子计算的方法。原子计算在sync/atomic包中。通过调用即可使用。func main(){ var ops uint64 = 0 // 定义一个计数器 for i:=0;i<50;i++{ go func() { for{ atomic.AddUint64(&am原创 2021-08-18 21:07:46 · 687 阅读 · 0 评论 -
Go学习笔记—工作池
Go学习笔记—工作池、等待组、速率限制1、工作池 Worker Pools工作池可以让goroutine安全的共享资源。通过goroutine和channel实现。func worker(id int,jobs <-chan int,results chan<- int){ for j := range jobs{ fmt.Println("worker",id,"processing job",j) time.Sleep(time.Second原创 2021-08-17 19:43:53 · 299 阅读 · 0 评论 -
Go学习笔记—定时器、打点器
Go学习笔记—定时器、打点器1、定时器定时器timer的功能是让一段Go代码在指定的时间段后运行一次。// The Timer type represents a single event.// When the Timer expires, the current time will be sent on C,// unless the Timer was created by AfterFunc.// A Timer must be created with NewTimer or Afte原创 2021-08-16 15:59:15 · 524 阅读 · 0 评论 -
Go学习笔记—通道补充
Go学习笔记—通道补充1、超时处理超时对于一个连接外部资源,或者其他一些需要花费执行时间操作的程序是很重要的。在Go语言中,通过channel和select,可以简洁而优雅的处理超时操作。通过匿名函数实现一个外部调用,在2秒后通过通道c1返回它的执行结果。func main(){ c1 := make(chan string,1) go func(){ //设置通道返回结果的时间 time.Sleep(time.Second * 2) c1 <- "res原创 2021-08-14 11:30:09 · 296 阅读 · 0 评论 -
Go学习笔记—通道
Go学习笔记—通道1、通道channel是连接多个gotoutine的管道。可以从一个Go协程将值发送到管道,在别的Go协程中接收。创建channel的语法是:make(chan val-type)make函数对于channel描述是:使用指定的缓冲区容量来初始化通道的缓冲区。chan是关键字,代表channel。val-type是类型,代表通道接受什么类型的数据。<-是通道操作符,指数据流的方向。使用channel<-来发送一个新的值到通道中。使用<-原创 2021-08-12 16:23:30 · 376 阅读 · 0 评论 -
Go学习笔记—协程
Go学习笔记—协程、通道1、协程Go协程在执行上是轻量级的线程。首先定义一个函数f(s),使用一般形式进行函数调用。func f(from string) { for i := 0;i < 3;i++{ fmt.Println(from,":",i) }}func main(){ f("index")}//index : 0//index : 1//index : 2Go语言中的关键字go用来开启goroutine。同一个程序中的所有goroutine共享同一个原创 2021-08-10 16:23:56 · 171 阅读 · 0 评论 -
Go学习笔记—错误处理
Go学习笔记—错误处理Go语言使用一个独立的,明确的返回值来传递错误信息。Go语言的错误处理方式能清楚的知道哪个函数返回了错误,并能像调用那些没有出错的函数一样调用。内置接口Go语言中的错误通常是最后一个返回值并且是error类型。error是一个内置的接口。Go语言中可以使用errors.New构造一个使用给定的错误信息的基本error值。func f1(arg int) (int,error){ if arg == 42{ return -1,errors.New("can't wo原创 2021-08-09 16:07:50 · 186 阅读 · 0 评论 -
Go学习笔记—接口
Go学习笔记—接口接口是方法的集合。接口是一种抽象的类型,只关心方法,不关心数据。只知道的是它的方法能做什么。接口的定义:每个接口由数个方法组成,其定义格式如下:type 接口类型名 interface{ 方法名1( 参数列表1 ) 返回值列表1 方法名2( 参数列表2 ) 返回值列表2 …}接口名:使用type将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有字符串功能的接口叫Stringer等。接口原创 2021-08-08 15:58:06 · 165 阅读 · 0 评论 -
Go学习笔记—结构体、方法
Go学习笔记—结构体、方法、接口感谢观看,如有错误,请留言指正!1、结构体结构体是各个字段的类型的集合。可以封装多个基本的数据类型。type student struct{ id int name string score int}使用这个语法可以创建一个新的结构体元素。type 类型名 struct { 字段名 字段类型 字段名 字段类型 …}类型名:标识自定义结构体的名称,在同一个包内不能重复。字段名:表示结构体字段名。结构体原创 2021-08-07 18:43:51 · 150 阅读 · 0 评论 -
Go学习笔记—函数
Go学习笔记—函数感谢观看,如有问题,请留言指正!谢谢函数函数是Go语言的中心。首先,看这个例子:func plus(a,b int) int{ return a+b}通过例子我们可以了解到函数由以下四部分组成:函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概念详见后文)。参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔。返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值原创 2021-08-06 16:26:39 · 119 阅读 · 0 评论 -
Go学习笔记—map字典和for-range遍历
Go学习笔记—02map、range感谢观看,如有问题,请留言指正!谢谢1、mapmap是Go内置的关联数据类型,也可称为字典或者哈希,内部由散列表(hash)实现map是一种无序的基于key-value的数据结构,需要使用内置的make()函数创建,其语法为://make(map[key-type]value-type)make(map[string]int)//Map: An empty map is allocated with enough space to hold the//原创 2021-08-06 11:03:59 · 1151 阅读 · 0 评论 -
Go学习笔记—数组、切片
Go学习笔记—01数组、切片感谢观看,如有问题,请留言指正!谢谢1、数组(array)一维数组Go语言中,数组是一个固定长度的数列。创建数组和数组初始化的方法:var a [5]int //创建定长的数组,同时初始化默认值全为0b := [5]int{1,2,3,4,5} //自动推导法,在创建数组的同时进行初始化var c = [...]int{1,23,5,623,7} //不定长数组,再定义数组的同时进行初始化二维数组//二维数组的定义和初始化原创 2021-08-05 21:07:33 · 130 阅读 · 0 评论 -
Go学习笔记—递归(阶乘、斐波那契数列、汉诺塔问题)
Go学习笔记—08递归如有问题,请留言指正!谢谢观看1.递归的定义一个程序在运行过程中调用自己。通常在一个.go的文件中,使用函数来达到循环调用的情况。构成递归具备的条件:子问题与原始问题为同样的事,且更为简单。必须要有递归调用的出口,也就是递归函数结束的条件。递归的使用一般都会有规律。2.递归的示例1.阶乘案列9的阶乘,可以化简为9!=9x8x7x6x5x4x3x2x1x1,首先0的阶乘是1,因此阶乘递归结束的条件就是//阶乘递归结束的条件,f(0)=1if n==0 {原创 2021-08-05 10:45:56 · 330 阅读 · 0 评论 -
Go学习笔记—指针
Go学习笔记-07指针感谢观看,如有错误,请留言指点!1、指针的基础Go语言像C语言一样保留了指针的用法,但是Go的指针是安全指针,不能进行偏移和运算。首先我们区分一下指针变量和普通变量指针变量:定义一个空间用来存储值的地址普通变量:定义一个空间直接存储值本身其次是指针类型和指针取值:指针类型:*int,*string等,对应的每一种数据类型都可以当做指针类型使用。类似C语言,Go语言也使用&和*来操作关于指针的变量&:代表取地址符,用来获取一个变量的地址存原创 2021-07-02 21:54:55 · 113 阅读 · 0 评论 -
Go语言函数练习—分金币
Go语言函数练习—分金币题目来源:https://www.liwenzhou.com/posts/Go/09_function/题目描述:你有50枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,Adriano,Aaron,Elizabeth。分配规则如下:a. 名字中每包含1个’e’或’E’分1枚金币b. 名字中每包含1个’i’或’I’分2枚金币c.名字中每包含1个’o’或’O’分3枚金币d: 名字中每包含1原创 2021-06-29 17:18:53 · 260 阅读 · 0 评论