在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、GO基础1. GOPATH2. GO 命令源码文件1)命令源码文件定义:命令源码文件是程序的运行入口,如果一个源码文件声明属于main包,并且包含一个无参数声明的main函数,那么它就是命令源码文件 2)命令源码文件接收参数的包:GO语言标准库中有一个代码包flag专门用于接收和解析程序参数 A. flag.StringVar()flag.StringVar(&name, "name", "everyone", "The greeting object.") 需要4个参数:
B. flag.String(): 直接返回一个已给分配好的用于存储命令参数值的地址flag.String("name", "everyone", "The greeting object.") 3)命令源码文件传入参数及查看参数说明C. flag.Parse(): 用于真正解析命令参数,并把它们的值赋给相应的变量a. demo2.go文件package main import ( "flag" "fmt" ) func init() { flag.StringVar(&name, "name", "everyone", "The greeting object.") } var name string func main() { flag.Parse() fmt.Printf("Hello, %s!\n", name) } b. 传参数name,执行$go run demo2.go -name="wujun" $Hello, wujun! C. 执行help查看命令参数说明$go run demo2.go --help $Usage of /var/folders/tc/25kk9vz522v3f6j_tffxzrwr0000gn/T/go-build732294726/b001/exe/demo2: -name string The greeting object. (default "everyone") exit status 2 二、 GO常用工具 1. 常用字符串函数处理包
2. 常用Go依赖管理工具
3. GO相关库
4. 测试相关
三、GO GC1. 避免内存分配和复制(1) 复杂对象尽量传递引用
(2) 初始化至合适的大小
(3) 复制内存2. 打开GC日志(1) 加上GODEBUG环境变量GODEBUG=gctrace=1 go test -bench=. GODEBUG=gctrace=1 go run main.go (2) 日志详情信息参考:https://godoc.org/runtime3. go tool trace(1) 普通程序输出trace信息
(2) 测试程序输出trace信息go test -trace trace.out (3) 可视化trace信息go tool trace trace.out 四、GO 性能调优1)安装graphvizbrew install graphviz 3)安装go-torch2) 将GOPATH/bin 加入 $PATH
4)通过文件方式输出Profile灵活性高,适用于特定代码段的分析,通过手动调用runtime/pprof的API,API相关文档:https://studygolang.com/static/pkgdoc/pkg/runtime_pprof.htm go tool pprof [binary] [binary.prof] go build xxx.go ./xxxx go tool pprof prof xxx.prof top list [function] svg 生成图 go-touch [binary.prof] 5) Go支持的多种Profile
6)通过HTTP方式输出Profile简单,适合于持续性运行的应用,在应用程序的中导入import_ "net/http/pprof", 并启动http server即可 http://<host>:<port>/debug/pprof go tool pprof _http://<host>:<port>/debug/pprof/profile?seconds=10 (默认为30s) go-torch -seconds 10 http://<host>:<port>/debug/pprof/profile 7)常见性能优化指标
8) 通过Benchmark进行性能分析go test -bench=. //benchmark测试 go test -brench=. -cpuprofile=cpu.prof //生成cpu prof分析文件 go test -brench=. -memprofile=mem.prof //生成mem prof分析文件 go tool pprof mem.prof // 性能分析 9)锁对性能的影响(1)减少锁的影响范围(2)减少发生锁冲突的概率A. sync.Map
B. Concurrent Map
(3) 避免锁的使用
10)字符串连接常见字符串连接方式:
上述方式的性能:strings.Builder >= bytes.Buffer > + > fmt.Sprintf五、 GO设计思路1) 面向错误的设计A. 隔离隔离错误:Micro Kernel(微内核设计)
隔离错误:部署
B. 重用VS隔离
C. 冗余
D. 单点失效
E. 慢响应
D. 错误传递断路器(配合服务降级)
2) 面向恢复的设计A. 健康检查a. 注意僵尸进程
b. let it crash!B. 构建可恢复的系统a. 拒绝单体系统b. 面向错误和恢复的设计
C. 与客户端协商3) Chaos Engineering如果问题经常发生人们就会学习和思考解决它的方法
A. Chaos Engineering原则
B. 相关开源项目https://github.com/Netflix/chaosmonkey https://github.com/easierway/service_decorators/blob/master/README.md
六、GO相关书籍推荐
|
请发表评论