惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
GbyAI
GbyAI
博客园 - Franky
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
人人都是产品经理
人人都是产品经理
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
I
InfoQ
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
有赞技术团队
有赞技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Full Disclosure
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
博客园 - 【当耐特】
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Project Zero
Project Zero
量子位
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
美团技术团队
Attack and Defense Labs
Attack and Defense Labs
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Blog of Author Tim Ferriss
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Troy Hunt's Blog
Google Online Security Blog
Google Online Security Blog
罗磊的独立博客
P
Proofpoint News Feed
Schneier on Security
Schneier on Security
Spread Privacy
Spread Privacy
S
SegmentFault 最新的问题
L
LINUX DO - 最新话题
Simon Willison's Weblog
Simon Willison's Weblog
爱范儿
爱范儿
博客园 - 聂微东
A
About on SuperTechFans
PCI Perspectives
PCI Perspectives
D
Docker

董泽润的技术笔记

美图 kv 存储 titan | 董泽润的技术笔记 聊聊并发库 conc | 董泽润的技术笔记 浅析 redis lua 实现 | 董泽润的技术笔记 IO Pipeline 读 Minio 源码 聊聊最近基于 S3 的项目 | 董泽润的技术笔记 新手如何调试 MySQL | 董泽润的技术笔记 为什么泛型使你的程序变慢 | 董泽润的技术笔记 每个 gopher 都需要了解的 Go AST 小技巧!Wireshark 让调试 GRPC 不再困难 | 董泽润的技术笔记 小技巧!k8s 环境下调试服务 | 董泽润的技术笔记 小技巧!如何用 systemtap 排查问题 | 董泽润的技术笔记 小白的 redis 1 安全漏洞 | 董泽润的技术笔记 聊聊时钟源为什么会影响性能 | 董泽润的技术笔记 聊聊为什么 IDL 只能扩展字段而非修改 | 董泽润的技术笔记 什么是 Pause 容器 | 董泽润的技术笔记 弱智的 MySQL NULL | 董泽润的技术笔记 分享一个 UT failed 引出的思考 | 董泽润的技术笔记 聊聊如何做技术分享 | 董泽润的技术笔记 聊聊 Go 并发安全 | 董泽润的技术笔记
小技巧!Mac 环境下编译 Go 服务 | 董泽润的技术笔记
2022-04-06 · via 董泽润的技术笔记

Grab 北京(格步科技)大量招聘 后端开发、全栈、IOS/Android、SRE, 还有少量实习生岗位开放。有意向的请联系我 ^_^

背景

本篇分享来源于上午和同事的讨论。大部份工程师都使用 Mac 做为开发环境,平常 local 编译 go 代码没什么问题,偶尔需要 linux binary, 交叉编译足够了

1
GOOS=linux GOARCH=amd64 go build main.go

比如上面指定 GOOS 是 linux, GOARCH 平台是 amd64. 但还是有些场景,Mac 无法解决

  1. 使用 CGO 的代码
  2. 想使用 gdb 去调试

第二个场景 gdb 我还折腾过一段时间,始终无法像 linux 平台那样完美。难道无法解决了嘛?

Docker

解决办法就是:**Docker 启动 ubuntu 虚拟机,然后挂载本地 GOPATH 目录到容器中**

让我们来看下操作细节:

安装 docker for mac 可以自行 google, 这里要注意调大 cpu 和 memory, 否则编译大型代码时内存不足。

1
2
3
~$ docker pull ubuntu
~$ docker create -ti --cpus 6 -m 6GB --privileged --name sextant -v /Users/zerun.dong/:/root/zerun.dong ubuntu bash -l
~$ docker start -ai sextant

上面命令分别是下载 ubuntu 镜像,创建名为 sextant 的容器,最后再启动

这里面 cpus m 用来设置资源,少了不够用。/Users/zerun.dong/:/root/zerun.dong 用于将本机目录挂载到容器中的 /root/zerun.dong 下面,privileged 允许容器对宿机主 root 权限

进到容器后,需要再安装 go binary, 然后设置好 GOPATH, PATH, GOROOT 后即可进行编译。成功后就会在 Mac 本机留下 linux binary, 也可直接在容器中用 gdb 进行调试,非常方便

1
2
~$ docker ps -a | grep -i ubuntu
~$ docker commit d497d0fee14d ubuntu:go

当然也使用 docker commit 保存刚才的容器运行时,这样下次使用就可以直接编译,省去刚才的操作步骤

小结

这次分享就这些,以后面还会分享更多的内容。如果感兴趣,请大家关注, 在看,点击左下角的分享素质三连哦(: