Golang-HTTP请求限流

在高并发应用场景中,为保证业务高峰期系统的稳定性或抵御CC攻击,最有效的方案为(缓存、降级、限流)
本文以限流为例,在Golang中示例如何通过中间件实现httpserver限流。

依赖

首先安装一个基本的限流算法包,然后为了方便,直接使用gin作为httprouter(后面会用到它的中间件)

1
2
3
$ go get -u golang.org/x/time/rate

$ go get -u github.com/gin-gonic/gin

Golang-Maps有序化遍历

Go的map元素遍历顺序(使用range关键字)是随机的,而不是遵循元素的添加顺序,为解决这一问题,可使用下面的遍历方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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("%s\t%d\n", key, map1[key])
}
}

可以看到,其关键思路就是先把所有Key拿出来排序,再按照排序后的进行遍历,主要用到了sort包的东西

关于sort还有些更个性化的用法,再看下面一个例子:

Golang-全平台交叉编译

Golang的交叉编译要保证golang版本在1.5以上,我的环境是go1.11.5 darwin/amd64

交叉编译

1
2
3
4
5
6
7
8
9
10
11
# 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二进制
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go

Golang-遍历二叉树实现

二叉树的几种遍历方式

1)先序遍历

1)访问根节点;2)采用先序递归遍历左子树;3)采用先序递归遍历右子树;

image.png
(注:每个节点的分支都遵循上述的访问顺序,体现“递归调用”)

Golang-变量定义与初始化

命名原则

go语言的变量名有字母数字和下划线组成,首字母不能为数字,但是字母不仅仅只限于英文字母,所有的UTF-8字符都是可以的。

使用var关键字

1
2
3
var num1 int = 1
var s1 string = "hello"
var num2 int // 如果没有赋初值,将使用所定义类型的默认值,此处num2=0

注意,Go语言是将变量类型放在后面的。

Golang开发环境配置

现如今Go语言的开发阵容可以说是空前强大,且背靠Google这棵大树,又不乏牛人坐镇,是名副其实的“牛二代”。
image.png
有关Go语言特性优缺点本文就不在赘述了,百度上一大堆。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×