在上一篇文章中准备完善woocoo「链接」,那在主力机器由Mac转向Windows时,涉及到开发习惯上的切换,因此本文说一下golang在Mac与Windows的不同开发体会。
woocoo之前一直是在Mac上开发,同时github的workflow的CI工作流的构建也是以unbantu在单元测试环境,因此在昨天把woocoo pull下来后,主模块执行单元测试后,发现少量与配置模块有关(conf)的失败了,为了运行全部模块的单元测试,就有了golang整体环境的回顾。
golang是跨平台编译已经做得非常好了,比如老生常谈的路径差异问题其实filepath处理得很好了
Unix: /path/file.ext
Windows: C:\path\file.ext
Unix: file:///etc/fstab -> /etc/fstabWindows: file:///c:/WINDOWS/clock.avi -> /c:/WINDOWS/clock.avi
在Windows上得到的路径无疑会出现问题,包括filepath.Abs等识别都会出现false的问题,不能直接处理,省事点就是使用runtime.GOOS来判断。
这样在打通了这些差异后,基本上在windows的开发环境基本也就算完成迁移了,那我会根据后续的开发进展,慢慢补充。
另外,需要注意的是两个不平台上的测试,分别跑,倒是出现奇怪的结果:
Mac: intel 9代: 6核32G
Windows:intel 14代I7 :8个P-core(性能核)和12个E-core(能效核)64G
go test -benchmem -run=^$ -bench ^BenchmarkGinDefault$ .
Mac: 59079 , 20768 ns/op , 403 B/op , 14 allocs/op
Windows: 37585 , 32986 ns/op , 620 B/op , 15 allocs/op
go test -benchmem -run=^$ -bench ^BenchmarkWooCooWebDefault$ .
Mac: 591321 , 1870 ns/op , 1196 B/op , 7 allocs/op
Windows: 1319931 , 940.2 ns/op , 1269 B/op , 7 allocs/op
go test -benchmem -run=^$ -bench ^BenchmarkGinDefaultMockLogger$ .
Mac: 729430 , 1438 ns/op , 317 B/op , 10 allocs/op
Windows: 1760342 , 688.8 ns/op , 314 B/op , 10 allocs/op
诧异表现就是 Gin 默认初始化结果在不同平台下与机器性能差异负相关了,应该是stdout的问题,而采用Gin内存日志与Woocoo采用Zap日志的表现就跟机器性能出现的误差就正常了。请有做过该项目研究的同学不领赐教。
查询端口占用: lsof -i tcp 80 --> netstat -ano | find ":80" , 获取到PID后,再任务管理器查哪个程序