
go语言基础
文章平均质量分 68
暖雪冷泉
go big or go home
展开
-
几种经典的负载均衡
随机负载均衡// 随机负载均衡type RandomBalance struct { curIndex int rss []string //观察主体 conf LoadBalanceConf}// 添加服务器地址func (r *RandomBalance) Add(params ...string) error { if len(params) == 0 { return errors.New("param len 1 at least") } addr :=.原创 2022-04-03 15:34:23 · 351 阅读 · 0 评论 -
正向代理与反向代理
函数是一等公民// 新建函数类型type HandlerFunc func(http.ResponseWriter, *http.Request)// 新建函数方法func (f HandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) { f(w, r)}// 主函数func main() { // 实例化函数 hf := HandlerFunc(HelloHandler) // 创建response对象.原创 2022-03-11 15:14:25 · 1232 阅读 · 0 评论 -
第7章 并发
Goroutine,Go 在语言层面对并发编程提供支持,⼀种类似协程,称作 goroutine 的机制。只需在函数调⽤语句前添加 go 关键字,就可创建并发执行单元。开发人员无需了解任何执行细节,调度器会自动将其安排到合适的系统线程上执行。goroutine 是⼀种非常轻量级的实现,可在单个进程里执行成千上万的并发任务。事实上,入口函数 main 就以 goroutine 运行。另有与之配套的 channel 类型,用以实现 “以通讯来共享内存” 的 CSP 模式go func() { fmt..原创 2022-02-28 19:36:43 · 233 阅读 · 0 评论 -
第6章 接口
接口定义,接口是⼀个或多个方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法,就表示它 “实现” 了该接口,无须在该类型上显式添加接口声明。所谓对应方法,是指有相同名称、参数列表 (不包括参数名) 以及返回值。当然,该类型还可以有其他方法。• 接口命名习惯以 er 结尾,结构体。• 接口只有方法签名,没有实现。• 接口没有数据字段。• 可在接口中嵌入其他接口。• 类型可实现多个接口。type Stringer interface { String() string}ty.原创 2022-02-27 23:29:29 · 131 阅读 · 0 评论 -
第5章 方法
5.1方法定义方法总是绑定对象实例,并隐式将实例作为第⼀实参 (receiver)。• 只能为当前包内命名类型定义方法。• 参数 receiver 可任意命名。如方法中未曾使用,可省略参数名。• 参数 receiver 类型可以是 T 或 *T。基类型 T 不能是接口或指针。• 不支持方法重载,receiver 只是参数签名的组成部分。• 可用实例 value 或 pointer 调用全部方法,编译器自动转换。没有构造和析构方法,通常用简单工厂模式返回对象实例type Queue str原创 2022-02-27 16:38:39 · 101 阅读 · 0 评论 -
第4章 数据
4.1 Array数组是值类型,赋值和传参会复制整个数组,而不是指针数组长度必须是常量,且是类型的组成部分,[2]int 和 [3]int 是不同类型支持 “==”、"!=" 操作符,因为内存总是被初始化过的指针数组 [n]*T,数组指针 *[n]Ta := [3]int{1, 2} // 未初始化元素值为 0。b := [...]int{1, 2, 3, 4} // 通过初始化值确定数组⻓度。c := [5]int{2: 100, 4: 200} // 使⽤索引号原创 2022-02-24 16:03:27 · 631 阅读 · 0 评论 -
第3章 函数
3.1函数的定义不支持 嵌套 (nested)、重载 (overload) 和 默认参数 (default parameter)• 无需声明原型。• 支持不定长变参。• 支持多返回值。• 支持命名返回参数。• 支持匿名函数和闭包。使用关键字 func 定义函数,左大括号依旧不能另起一行func test(x, y int, s string) (int, string) { // 类型相同的相邻参数可合并。 n := x + y // 多返回值必须⽤括号。 return n, fmt原创 2022-02-22 16:10:13 · 164 阅读 · 0 评论 -
第2章 表达式
2.1保留字breakdefaultfuncinterfaceselectcasedefergomapstructchanelsegotopackageswitchconstfallthroughifrangetypecontinueforimportreturnvar2.2运算符位运算演示fmt.Printf("0110 & 1011 = %v (0010) \n", (0110 & 1011))原创 2022-02-20 17:04:05 · 295 阅读 · 0 评论 -
第1章 类型
1.1变量多变量赋值时,先计算所有相关值,然后再从左到右依次赋值data, i := [3]int{0, 1, 2}, 0fmt.Printf("初始化变量 data=%v, i=%v \n", data, i)i, data[i] = 2, 100fmt.Printf("赋值后的变量 data=%v, i=%v", data, i)/* 初始化变量 data=[0 1 2], i=0 赋值后的变量 data=[100 1 2], i=2*/重新赋值和定义新的同名变量是有区别的,原创 2022-02-18 12:46:26 · 419 阅读 · 0 评论