小技巧!Mac 环境下编译 Go 服务

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

 [[404330]]

本文转载自微信公众号「董泽润的技术笔记」,作者董泽润。转载本文请联系董泽润的技术笔记公众号。

背景

本篇分享来源于上午和同事的讨论。大部分工程师都使用 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 平台那样完美。以前很蠢的,总是将代码 clone 到 linux 开发机上。难道无法解决了嘛?

Docker

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

让我们来看下操作细节:

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

  1. ~$ docker pull ubuntu 
  2. ~$ docker create -ti --cpus 6 -m 6GB --privileged --name sextant -v /Users/zerun.dong/:/root/zerun.dong ubuntu bash -l 
  3. ~$ 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. ~$ docker ps -a | grep -i ubuntu 
  2. ~$ docker commit d497d0fee14d ubuntu:go 

当然建议使用 docker commit 保存刚才的容器运行时,这样下次就可以直接使用 ubuntu:go 镜像,然后编译,省去刚才的操作步骤

责任编辑:武晓燕 来源: 董泽润的技术笔记
相关推荐

2011-02-25 14:10:52

Proftpd技巧

2021-06-09 07:15:20

Go枚举技巧

2011-03-09 16:16:57

CentOSLAMP

2011-03-16 11:39:03

2009-08-07 10:18:13

Linux反弹CmdLine S技巧

2019-12-04 12:28:24

TOP命令Linux

2021-07-06 12:07:27

Go 服务性能

2015-08-07 11:11:15

反编译源代码Mac

2021-07-07 12:02:25

Go 服务进程

2010-01-08 09:43:40

Ubuntu ngin

2010-04-12 09:07:09

Make命令

2016-09-14 14:24:18

云服务数据

2015-04-02 16:15:24

Java Java 开发环境Mac OS X

2009-07-19 10:48:53

LinuxWebShell反弹CmdLine She

2015-07-06 10:02:57

Swift编译配置

2011-07-02 14:11:46

Qt Gtk Ubuntu

2009-10-09 14:45:00

ccna小技巧ccna

2020-12-08 12:59:42

编译烧录 for Mac

2011-02-21 16:41:19

Sendmail

2011-02-23 13:39:59

Ubuntuvsftpd
点赞
收藏

51CTO技术栈公众号