Emacs setup for Go Development


概述

最近在我个人笔记本搭建Go开发环境,需要开发基于Go的一些业务模块,所以就把Go开发环境的配置记录下来。废话少说,直接上代码,嘿嘿!

Emacs 和 GO 安装

由于我个人笔记本电脑是MAC Pro,所以在这里主要基于OSX搭建Go开发环境。个人平时编辑器基本上是Emacs,这篇博客主要是记录我在MAC下设置Emacs支持Go开发环境。

Emacs 安装

由于mac自带的emacs版本比较低,所以建议删除或者更新Emacs,个人喜欢干净利索就把旧的emacs删除掉了。新版本的mac,增加了保护系统程序的功能。如果要删除/usr/bin/或者/usr/local/bin目录西面的内容需要做如下设置。

1.开机按 cmd+r,选择utilities》terminal
2.执行 csrutil disable
3.reboot
4.启动后 执行 
    rm -rf /usr/share/emacs
    rm -rf /usr/local/bin/emacs*
5.按1的方法,再执行 csrutil enable

然后在安装新版本的Emacs:

brew cask uninstall --force emacs
brew cask install emacs --with-cocoa --srgb --with-x --with-gnutls
然后安装完成之后再.profile(或者.zshrc)设置emacs alias
alias emacs='/Applications/Emacs.app/Contents/MacOS/Emacs-x86_64-10_5'
alias eme='emacs -nw'
alias ems='emacs --daemon&'
alias emc='emacsclient -c '
alias emt='emacsclient -t '
alias ec="emacsclient -e '(kill-emacs)'"

Go 安装

现在需要安装GoLang,Go安装可以通过以下两种方式:

  • brew install go
  • 官网下载Go dmg

安装完成之后,在.profile设置如下:

#csutom go project path
export GOPATH=${HOME}/studay/go
#go install path
export GOROOT=/usr/local/go
export PATH=$PATH:${GOPATH}/bin:${GOROOT}/bin
source .zshrc

创建一个Go Project目录,以后所有的Go项目目录都放在这里即可,进入目录并安装一些非常有用的组件。比如:~/studay/go。

cd ~/studay/go
go get -u golang.org/x/tools/cmd/goimports
go get -u golang.org/x/tools/cmd/vet
go get -u golang.org/x/tools/cmd/oracle
go get -u golang.org/x/tools/cmd/godoc
go get -u github.com/golang/lint/golint
go get -u github.com/nsf/gocode

到此Go就安装完毕。

配置Emacs Go IDE

为了配置Emacs作为Go的Ide,需要设置一些hook和安装包。

go-mode

安装go-mode,M-x package-install go-mode,并如下配置:

(require 'go-mode)
(defun go-mode-setup())

go-eldoc

安装go-eldoc:M-x package-install go-eldoc,并且如下配置:

(defun go-mode-setup()
 (go-eldoc-setup)
)

gofmt

加载gofmt,并如下配置:

;;Format before saving
(defun go-mode-setup ()
  (go-eldoc-setup)
    (add-hook 'before-save-hook 'gofmt-before-save))
    (add-hook 'go-mode-hook 'go-mode-setup)

goimports

goimports设置如下:

(defun go-mode-setup ()
  (go-eldoc-setup)
  (setq gofmt-command "goimports")
  (add-hook 'before-save-hook 'gofmt-before-save))
(add-hook 'go-mode-hook 'go-mode-setup)

godef

godef可以跳转到定义,具体设置如下:

;;Godef, shows function definition when calling godef-jump
(defun go-mode-setup ()
  (go-eldoc-setup)
  (setq gofmt-command "goimports")
  (add-hook 'before-save-hook 'gofmt-before-save)
  (local-set-key (kbd "M-.") 'godef-jump))
(add-hook 'go-mode-hook 'go-mode-setup)

自定制编译命令

;;Custom Compile Command
(defun go-mode-setup ()
  (setq compile-command "go build -v && go test -v && go vet && golint")
  (define-key (current-local-map) "\C-c\C-c" 'compile)
  (go-eldoc-setup)
  (setq gofmt-command "goimports")
  (add-hook 'before-save-hook 'gofmt-before-save)
  (local-set-key (kbd "M-.") 'godef-jump))
  (add-hook 'go-mode-hook 'go-mode-setup)

封装init-go.el

都放在init.el里面显示文件太大也不易于管理,所以我在这里就创建了一个init-go.el,所有的设置如下:

;;;custom go ide
(require 'go-autocomplete)
(require 'go-eldoc)
(require 'go-mode)
(require 'auto-complete-config)
(require 'golint)
(ac-config-default)
(defun go-mode-setup ()
  (go-eldoc-setup)
  (setq gofmt-command "goimports")
  (setq compile-command "go build -v && go test -v && go vet")
  (define-key (current-local-map) "\C-c\C-c" 'compile)
  (add-hook 'before-save-hook 'gofmt-before-save)
  (local-set-key (kbd "M-.") 'godef-jump))
(add-hook 'go-mode-hook 'go-mode-setup)
(provide 'init-go)
;;;

在init.el里面,只需要装载即可:(require ‘init-go)。这样一个完整的go ide就设置完成,请看一下效果。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cmazxiaoma的架构师之路

MyEclipse使用Git进行Push to Upstream报错 学习笔记

10520
来自专栏Linux驱动

Linux-kill命令(11)

kill:指定将信号发送给某个进程,常用来杀掉进程,可以通过ps、top命令来查看进程 在默认情况下: 采用编号为15的TERM信号。TERM信号将终止所有不能...

24450
来自专栏Java学习123

windows下使用curl命令 && 常用curl命令

52380
来自专栏LIN_ZONE

thinkphp5中使用phpmailer实现发送邮件功能(转载)

一、开启SMTP服务(使用php发送邮件需要用到SMTP服务,这里以163邮箱的SMTP服务为例)。

17910
来自专栏张戈的专栏

Linux系统编译安装Redis以及主从复制配置小记

Redis 的安装配置很简单,而且很早之前就装过 Redis,可这几天再次安装时居然又遗忘了一些细节,看来好记性不如烂笔头,还是在博客记录一下比较好,至少不用总...

29630
来自专栏龙首琴剑庐

Tomcat6/7应用服务器-禁用RC4等弱密码套件

最近更新了新版浏览器的同学是不是偶尔会遇到SSL加密协议不灵,访问不了的情况? 最典型的例子是使用FF39+访问某些网站时报错:Error code: ssl...

45550
来自专栏潇涧技术专栏

Using Git with multiple Public Keys

很多时候,如果我们在多个网站有了Git账号,例如Github、GitCafe、CodingNet等,当我们与不同网站的代码库进行连接的时候可能会因为我们没有配置...

8220
来自专栏惨绿少年

SSH服务详解

第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Wo...

49900
来自专栏FreeBuf

如何绕过安卓的网络安全配置功能

随着Nougat(Android 7)的发布 ,一个名为“Network Security Configuration”的新安全功能也随之而来。这个新功能的目标...

15730
来自专栏云计算教程系列

如何使用Spiped在Ubuntu 16.04上加密到Redis的流量

Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅消息传递模式以及其他功能之间的自动故障转移功能。Redis...

37800

扫码关注云+社区

领取腾讯云代金券