随笔分类 - go
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
摘要:context使用 Go语言第一形参通常都为context.Context类型,1. 传递上下文 2. 控制子Goroutine超时退出 3. 控制子Goroutine定时退出 package main import ( "context" "fmt" "time" ) func main() {
阅读全文
摘要:使用channel实现协程池 通过 Channel 实现 Goroutine Pool,缺点是会造成协程的频繁开辟和注销,但好在简单灵活通用。 package main import ( "fmt" "io/ioutil" "net/http" "sync" ) // Pool goroutine
阅读全文
摘要:使用channel实现协程池 通过 Channel 实现 Goroutine Pool,缺点协程的频繁开辟和注销,但简单通用灵活 package main import ( "fmt" "io/ioutil" "net/http" "sync" ) // Pool goroutine Pool ty
阅读全文
摘要:链表的特点和初始化 链表的特点 用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的) 结点 结点(node) 数据域 => 存储元素信息 指针域 => 存储结点的直接后继,也称作指针或链 首元结点 是指链表中存储的第一个数据元素的结点 头结点 是在首元结点之前附设的
阅读全文
摘要:在 Go 语言程序开发中,goroutine 的使用是比较频繁的,因此在日常编码的时候 goroutine 里的错误处理,怎么做会比较好呢?
阅读全文
摘要:前言 在 Go 中如果声明了两个字符相同的错误,但命名是新的变量,此时两个错误不相等 package main import ( "errors" "fmt" ) var err1 = errors.New("not found") var err2 = errors.New("not found"
阅读全文
摘要:用法 大家对于 json 和 struct 之间的转换一定不陌生,为了将代码中的结构体与 json 数据解耦,通常我们会在结构体的 field 类型后加上解释说明,例如在表示一个地址的时候, json 数据如下所示 { "street": "200 Larkin St", "city": "San
阅读全文
摘要:报错 go ERROR invalid character '<' looking for beginning of value 请检查服务器响应数据是否正确,能够正确被 json 解析 一般碰到这个问题都是因为json.Unmarshal解析了不正确的格式导致的 jsonErr := json.U
阅读全文
摘要:起因 从币安实时拉取交易对的数据,这里使用了 map,用于存放每个交易对的最新价格,由于 map 并不是并发安全的所以加了读写锁。 但系统有时候还是会发生 fatal error: concurrent map iteration and map write 错误 使用代码如下: type Bina
阅读全文
摘要:interface interface{} 接口、interface{} 类型很多人都会混淆。interface{} 类型是没有方法的接口。由于没有 implements 关键字,所以说所有的类型都至少实现了 0 个方法,所有类型都实现了空接口。这意味着,如果编写一个函数以 interface{}
阅读全文
摘要:浮点数介绍 Go语言提供了两种精度的浮点数:float32 和 float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。 这些浮点数类型的范围可以从很微小到很巨大。浮点数的范围极限值可以在 math 包找到,常量 math.MaxFloat32 表示 f
阅读全文
摘要:整型介绍 Go语言同时提供了有符号和无符号类型的整数运算。这里有 int8、int16、int32 和 int64 四种截然不同大小的有符号整形数类型,分别对应 8、16、32、64 bit大小的有符号整形数,与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整形数类
阅读全文
摘要:Go语言类型系统 从计算机底层看,所有的数据都是由比特组成,但计算机一般操作的是固定大小的数,如整数、浮点数、比特数组、内存地址等。但是直接操控底层计算机指令进行编程是非常繁琐和容易出错的,所以Go语言对底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观和易于理解。 在Go语言中,数据通
阅读全文
摘要:常量 相对于变量而言,常量是在程序使用过程中,不会改变的数据。有些地方你需要将定义好的常量重复使用,代码中你不允许它的值改变。例如 圆周率 在程序执行过程中不会改变。 常量的声明 const Pi float64 = 3.14 const 声明、Pi 常量、float64 类型、3.14 值 多变量
阅读全文
摘要:变量 Go语言是静态强类型语言,所以变量是有明确类型的。变量实质上就是在内存中的一小块空间,用来存储特定类型的可变数据。如果没有变量我们的程序只能将数值写死都是静态的数据,无法更改,变量可以让我们进行动态的操作。在数学概念中变量表示没有固定的值,可以随时改变的数。例如:除数、减数与被减数。 类型 变
阅读全文
摘要:Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母组成,如 scanner.go 。如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 scanner_test.go 。文件名不包含空格或其他特殊字符。 一个源文件可以包含任意多行的代码,Go 本身没有对源文件的大小
阅读全文
摘要:创建第一个Go程序 新建一个 helloworld.go 文件,写入以下程序 package main import ( "fmt" ) // 一个函数声明 /* 一个main函数声明 */ func main() { fmt.Println("Hello, 世界") } 运行程序 go run h
阅读全文
摘要:下载介绍 在go的官方网址上下载go最新版本https://golang.google.cn/dl/,或者在 Go 的中文网上下载https://studygolang.com/dl,两个网站打开的内容只有语言不同而已,网站上清晰的标注了不同操作系统需要对应安装哪个版本,其中加粗的是该操作系统的推荐
阅读全文
摘要:前言 在任何编程语言中,关乎到数据的排序都会有对应的策略,我们来看下 Golang 是怎样对数据进行排序,以及我们如何优化处理使用 go 排序 go 可以针对任何对象排序,虽然很多情况下是一个 slice 切片,或者是包含 slice 的一个对象。 go 排序(接口)有三个要素: 待排序元素个数 n
阅读全文
摘要:前言 Golang 支持交叉编译, 即同一份代码,在一个平台上生成,然后可以在另外一个平台去执行。 之前写过一篇 Golang windows下 交叉编译 感觉写的不够全面,这篇作为补充。 交叉编译 Mac 上编译 # 生成编译文件,在 Linux 中运行 CGO_ENABLED=0 GOOS=li
阅读全文