标签: Golang

7 篇文章

thumbnail
造个轮子::实现一个极简的Goroutine Pool
概述 Go语言的协程(Goroutine)是一种相对线程而言更廉价的方式,虽然是轻量级的,但Goroutine太多仍会导致调度性能下降、GC 频繁、内存暴涨, 引发一系列问题。在面临这样的场景时, 限制 Goroutine的数量、重用显然很有价值。 解决方案 要解决这个问题,首先要考虑的是以下几点: Goroutine的数量如何限制Goroutin…
thumbnail
Golang实现HTTP请求限流
在高并发应用场景中,为保证业务高峰期系统的稳定性或抵御CC攻击,最有效的方案为(缓存、降级、限流)本文以限流为例,在Golang中示例如何通过中间件实现httpserver限流。 依赖 首先安装一个基本的限流算法包,然后为了方便,直接使用gin作为httprouter(后面会用到它的中间件) $ go get -u golang.org/x/tim…
thumbnail
Golang实现有序遍历Map
Go的map元素遍历顺序(使用range关键字)是随机的,而不是遵循元素的添加顺序,为解决这一问题,可使用下面的遍历方式。 package main import ( "fmt" "sort" ) func main() { map1 := map[int]string{ 0: "java", 1: "golang", 2: "python…
thumbnail
Golang-Modules包管理之道
golang原始的包管理方式非常low,然终于在go version 1.1.1之后,官方推出了模块概念,但是目前该功能还在试验阶段,有些地方还需要不断的进行完善。在官方正式宣布之前,打算不断修正这种支持。到时候就可以移除对GOPATH和go get命令的支持。 初始化 目前modules机制仍在早期阶段,golang提供了一个环境变量“GO111…
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=…
thumbnail
Golang二叉树遍历实现
二叉树的几种遍历方式 1)先序遍历 1)访问根节点;2)采用先序递归遍历左子树;3)采用先序递归遍历右子树; (注:每个节点的分支都遵循上述的访问顺序,体现“递归调用”) 2)中序遍历 1)采用中序遍历左子树;2)访问根节点;3)采用中序遍历右子树; 3)后序遍历 1)采用后序递归遍历左子树;2)采用后序递归遍历右子树;3)访问根节点; 三种方法遍…
thumbnail
Golang开发环境配置
现如今Go语言的开发阵容可以说是空前强大,且背靠Google这棵大树,又不乏牛人坐镇,是名副其实的“牛二代”。 有关Go语言特性优缺点本文就不再赘述了,百度上一大堆。  下载SDK 本文使用macOS操作系统为例,其他系统操作大同小异 下载地址:https://golang.org/dl/ 安装SDK 双击下载后的pkg进行安装,安装成功后,打开终…