随笔分类 - Golang
摘要:GO (无法)同时引用同一个库的不同版本(未从代码角度解决) 背景 一个区块链项目需要用到 https://github.com/ethereum/go-ethereum (geth)这个库去对不同的链(eth, bnb 等)包括我们自己的链(随便取个称呼BF)进行扫块。项目中用的是 geth v1
阅读全文
摘要:package main import ( "fmt" "io" "strings" ) func main() { r := f1(-1) if r == nil { fmt.Println("r error") } else { r.Read([]byte("")) // panic: runt
阅读全文
摘要:Go 切片 切片结构 源码包 src/runtime/slice.go 中 定义 slice 的结构为 type slice struct { array unsafe.Pointer len int cap int } array 指针指向底层数组 len 表示切片长度 cap 表示切片容量 切片
阅读全文
摘要:Go 文件操作-读写文件 Go读取文件 整个文件读取进内存(适合读小文件) 1. 直接指定文件名读取 os.ReadFile() ioutil.ReadFile() (在 Go 1.16 开始,ioutil.ReadFile() 就等价于 os.ReadFile()) package main im
阅读全文
摘要:GO 反转字符串 package main import "fmt" func main() { str := "hello,world" bytes := []byte(str) lenBytes := len(bytes) forLen := lenBytes / 2 for i := 0; i
阅读全文
摘要:GO 下划线(_)的作用 import时使用下划线 import _ "net/http/pprof" 此时会调用对应包的init()函数进行初始化,不会使用包中的其他功能。 用下划线来接收返回值 _, err := http.Head(url) 判断结构体是否实现了接口 type Animal i
阅读全文
摘要:GO 使用嵌套map应该多次分配空间 demo package main import ( "fmt" ) func main() { // 初始化一个map var tmp map[int64]interface{} //tmp[1] = "abc" // panic:assignment to
阅读全文
摘要:GO json.Unmarshal() 解析不区分json字段的大小写 demo package main import ( "encoding/json" "fmt" ) type Demo struct { ABD string `json:"ABD"` } type Demo2 struct
阅读全文
摘要:Uber Go 语言编码规范 Uber Go 语言编码规范
阅读全文
摘要:GO 常用工具函数 // 求两个时间戳(单位 秒)之间间隔的自然天数 // // 2022-07-04 00:00 2022-07-05 xx:xx => 1 // 2022-07-04 00:00 2022-07-04 xx:xx => 0 func DiffIntervalNatureDays(
阅读全文
摘要:GO 组合模式(Composite Pattern) 1. 组件 (Component) 接口描述了树中简单项目和复杂项目所共有的操作。 2. 叶节点 (Leaf) 是树的基本结构, 它不包含子项目。 一般情况下, 叶节点最终会完成大部分的实际工作, 因为它们无法将工作指派给其他部分。 3. 容器
阅读全文
摘要:GO 断言时不能只接收一个参数 DEMO package main import "fmt" func GetString() interface{} { return "abc" } func main() { // 不显式声明断言的第二个参数 当断言失败时 会panic str := GetSt
阅读全文
摘要:GO 自定义Cache DEMO package main import ( "fmt" "sync" "time" ) // 缓存对象 type CacheItem struct { Value interface{} // 实际缓存的对象 TTL time.Duration // 存活时间 Cr
阅读全文
摘要:GO 函数式选项模式(Functional Options Pattern) Option模式的优缺点 优点: 1. 支持传递多个参数,并且在参数个数、类型发生变化时保持兼容性 2. 任意顺序传递参数 3. 支持默认值 4. 方便拓展 缺点: 1. 增加许多function,成本增大 2. 参数不太
阅读全文