
Go常见设计模式
设计模式是为了语言擦屁股。不同语言由于自身优劣不同,常见的设计模式及其实现有些小差别。 Go的思想是“组合优于继承”,不依托于复杂的类层次来实现多态,推荐使用Interface、高阶函数(行为参数化)、Goroutine/Channel 来实现各类设计模式。 策略模式 与大多数oop语言相同,go策略模式也依托于接口来实现。 在实际工程中,我们经常会搭配策略模式和简单工厂模式。对于不...

设计模式是为了语言擦屁股。不同语言由于自身优劣不同,常见的设计模式及其实现有些小差别。 Go的思想是“组合优于继承”,不依托于复杂的类层次来实现多态,推荐使用Interface、高阶函数(行为参数化)、Goroutine/Channel 来实现各类设计模式。 策略模式 与大多数oop语言相同,go策略模式也依托于接口来实现。 在实际工程中,我们经常会搭配策略模式和简单工厂模式。对于不...
要判断 Go 语言中变量是否会逃逸到堆上,核心思想是: 如果变量的生命周期超过其创建所在的函数栈帧生命周期; 或者编译器无法在编译期确定其安全分配在栈上,则会发生逃逸。 逃逸触发场景 1. 函数返回变量的指针或引用(最常见) 判断逻辑:函数返回局部变量的地址 → 变量生命周期需长于函数栈 → 必须逃逸到堆。 package main f...
参考资料 Go切片的实例化方式有很多种: s:= []int{1,2,3,4,5} s1:=make([]int,3,5) 数据结构 go/src/runtime/slice.go type slice struct { array unsafe.Pointer //指向底层数组的指针 len int //当前长度 cap i...
Go Map 1.22- 参考资料 Go 1.22 及之前 map 主要由两部分实现 hashmap+bitmap hmap 与 bmap 结构 hmap 结构 type hmap struct{ count int //当前元素个数 B uint8 // 桶数 = 2^B hash0 uint32//哈希种子 buckets unsafe.Pointer //指向...
参考资料 数据存储 go/src/runtime/chan.go中,chan的底层结构为 hchan // hchan是Channel的底层结构体 type hchan struct { qcount uint // 队列中元素数量 dataqsiz uint // 环形队列容量 buf unsafe.Pointer // 环...
GMP 概念 参考资料 GMP 是 Go 运行时调度器的核心模型,三者分工明确: 组件 英文全称 中文释义 核心定位 G Goroutine 协程 用户态执行单元(业务逻辑载体) M Machine...
传统IO 背景:传统IO场景下,服务器把磁盘文件网络IO发送给客户端Socket read(file_fd, user_buf, ...); // 读文件到用户缓冲区 write(sock_fd, user_buf, ...); // 从用户缓冲区写到网络 这个过程中会发生很多次内核用户态切换: read() 磁盘→内核缓存(DMA读入) DMA:Direc...
请先安装 dotnet sdk 8.0或更高版本sdk 官方文档 https://www.datable.cn/docs/beginner 官方样例demo https://gitee.com/focus-creative-games/luban_examples 概念术语 一、表结构 上图是一张excel表。红框单元格声明该行类型,蓝框单元格为各类型对应的值。数据...
众所周知,Go不支持方法重载。我们如果想写一个 n -> n*n 的平方方法,最简单粗暴的方法就是针对不同的类型编写不同方法名但具有类似方法体的方法。 func SquareInt(n int) int{ return n*n } func SquareFloat(n float64) float64{ return n*n } 如果该场景只针对int\floa...
这段实习应该把什么东西写到简历上? 新体验 游戏项目与传统web项目的架构区别 Go语言本身:游戏服务器大多都已转型为go,而web项目的主体仍是java占大头。故在此讨论java与go的一些区别。go作为一门09年才正式发布的年轻语言,设计理念围绕“简洁”二字。其特点有:静态类型和编译型、跨平台、自动GC、原生并发支持、风格强统一、多范式编程。 ...