包含标签 Golang 的文章

造个轮子::实现一个极简的Goroutine Pool

概述 Go语言的协程(Goroutine)是一种相对线程而言更廉价的方式,虽然是轻量级的,但Goroutine太多仍会导致调度性能下降、GC 频繁、内存暴涨, 引发一系列问题。在面临这样的场景时, 限制 Goroutine的数量、重用显然很有价值。 解决方案 要解决这个问题,首先要考虑的是以下……

阅读全文

Golang实现HTTP请求限流

在高并发应用场景中,为保证业务高峰期系统的稳定性或抵御CC攻击,最有效的方案为(缓存、降级、限流) 本文以限流为例,在Golang中示例如何通过中间件实现httpserver限流。 依赖 首先安装一个基本的限流算法包,然后为了方便,直接使用gin作为httprouter(后面会用到它的……

阅读全文

Golang实现有序遍历Map

Go的map元素遍历顺序(使用range关键字)是随机的,而不是遵循元素的添加顺序,为解决这一问题,可使用下面的遍历方式。 package main import ( "fmt" "sort" ) func main() { map1 := map[int]string{ 0: "java", 1: "golang", 2: "python", } var keys []int for key := range map1 { keys = append(keys, name) } sort.Ints(keys) for _, key := range keys { fmt.Printf("%st%dn", key, map1[key]) } } 可以看到,其关键思路就是先把所有Key拿出来排序,再按照排序后的……

阅读全文

Golang-Modules包管理之道

golang原始的包管理方式非常low,然终于在go version 1.1.1之后,官方推出了模块概念,但是目前该功能还在试验阶段,有些地方还需要不断的进行完善。在官方正式宣布之前,打算不断修正这种支持。到时候就可以移除对GOPATH和go get命令的支持。 初始化 目前modules机制仍在早期……

阅读全文

Golang-全平台交叉编译

Golang的交叉编译要保证golang版本在1.5以上,我的环境是go1.11.5 darwin/amd64 交叉编译 ### mac上编译linux和windows二进制 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go ### linux上编译mac和windows二进制 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go ### windows上编译mac和linux二进制……

阅读全文

Golang二叉树遍历实现

二叉树的几种遍历方式 1)先序遍历 1)访问根节点;2)采用先序递归遍历左子树;3)采用先序递归遍历右子树; (注:每个节点的分支都遵循上述的访问顺序,体现“递归调用”) 2)中序遍历 1)采用中序遍历左子树;2)访问根节点;3)采用中序遍历右子树; 3)后序遍历 1)采用后序递归遍历左子树;……

阅读全文

Golang开发环境配置

现如今Go语言的开发阵容可以说是空前强大,且背靠Google这棵大树,又不乏牛人坐镇,是名副其实的“牛二代”。 有关Go语言特性优缺点本文就不再赘述了,百度上一大堆。 下载SDK 本文使用macOS操作系统为例,其他系统操作大同小异 下载地址:https://golang.org/dl/……

阅读全文