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

点击右上角即可分享
微信分享提示