随笔分类 - golang
1
摘要:pprof引入方法pprof引入代码有两种方式: 1、一种是项目中导入runtime/pprof,主要用来产生dump文件,然后再使用 Go Tool PProf 来分析这运行日志,此种方式在普通的单机程序未使用http网络服务上使用。 2、另一种方式是项目中导入net/http/pprof,net
阅读全文
摘要:注意:如果 struct 中含有不能被比较的字段类型,就不能被比较,如果struct中所有的字段类型都支持比较。 那么就可以被比较,同时只有所有属性都相等而属性顺序都一致的结构体才能进行比较。 不可被比较的类型: ① slice,因为slice是引用类型,除非是和nil比较 ② map,和slice
阅读全文
摘要:1、Snowflake算法(分布式全局唯一id) snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫
阅读全文
摘要:1、安装依赖 brew install automakebrew install libtool 2、安装protoc工具 brew install protobufprotoc --version (最新版本) golang安装 github.com/golang/protobuf 在定义prot
阅读全文
摘要:使用sort包的函数进行排序时,集合需要实现sort.Inteface接口,该接口中有三个方法: // Len is the number of elements in the collection. Len() int // Less reports whether the element wit
阅读全文
摘要:1、jwt(已学) https://github.com/dgrijalva/jwt-go ps.自定义token 2、httprouter https://github.com/gorilla/mux.
阅读全文
摘要:1、以块的形式读取文件 package main import ( "io" "os" "fmt" ) const BufferSize = 100 func main() { file, err := os.Open("filetoread.txt") if err != nil { fmt.Pr
阅读全文
摘要:package main import ( "bufio" //缓存IO "fmt" "io" "io/ioutil" //io 工具包 "os" ) func check(e error) { if e != nil { panic(e) } } /** * 判断文件是否存在 存在返回 true
阅读全文
摘要:1、Golang调度器的由来 2、Goroutine调度器的GMP模型及设计思想 3、Goroutine调度场景过程全图文解析 早期的单进程操作系统,面临2个问题: 1.单一的执行流程,计算机只能一个任务一个任务处理。 2.进程阻塞所带来的CPU时间浪费。 多进程/线程时代有了调度器需求: 进程拥有
阅读全文
摘要:sync.map 适用于读多写少的场景。对于写多的场景,会导致 read map 缓存失效,需要加锁,导致冲突变多;而且由于未命中 read map 次数过多,导致 dirty map 提升为 read map,这是一个 O(N) 的操作,会进一步降低性能。 type Map struct { //
阅读全文
摘要:Go1.8 三色标记+混合写屏障 基于插入写屏障和删除写屏障在结束时需要STW来重新扫描栈,所带来的性能瓶颈,Go在1.8引入了混合写屏障的方式实现了弱三色不变式的设计方式,混合写屏障分下面四步: GC开始时将栈上可达对象全部标记为黑色(不需要二次扫描,无需STW) GC期间,任何栈上创建的新对象均
阅读全文
摘要:1、部署代码部署及端口监听设置: 注意docker里面的host不能配置127.0.0.1或者192.168.0.1否则宿主机器将无法访问端口。所以这里服务启动时要绑定在0.0.0.0上。 即golang程序监听 0.0.0.0:port 2、dockerfile 生成 FROM golang:al
阅读全文
摘要:新建一个MODULE 1、go mod init project-name 2、git push git-url 3、git tag 版本 4、本地使用获取 go get git-url 版本号 引入本地包 本地包,只需要替换路径即可 私有库,非正常引用 1、配置 ssh 下载访问私有库 2、配置
阅读全文
摘要:要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。 func changeString() { s1 := "big" // 强制类型转换 byteS1 := []byte(s1) byteS1[0] = 'p' f
阅读全文
摘要:package main import "fmt" func main() { fmt.Println("f1 result: ", f1()) fmt.Println("f2 result: ", f2()) } func f1() int { var i int defer func() { i
阅读全文
摘要:类型 T 方法集包含全部 receiver T 方法。 类型 *T 方法集包含全部 receiver T + *T 方法。 如类型 S 包含匿名字段 T,则 S 和 *S 方法集包含 T 方法。 如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 T + *T 方法。 不管嵌入 T 或 *
阅读全文
摘要:package main import ( "log" "time" ) type student struct { Name string Age int } func main() { m := make([]*student, 3) stus := []student{ student{Nam
阅读全文
摘要:第一步: go get github.com/astaxie/beego 报错:unrecognized import path "google.golang.org/protobuf...... mkdir -p 创建google.golang.org及子目录。 git clone https:/
阅读全文
摘要:golang struct函数的参数设置: 实例一:形参和类型都为指针类型 type user struct { Name string Age int}func (u *user) setUser(a *user) { a.Name = "fwefew" fmt.Printf("func => 形
阅读全文
1
