Emacs setup for Go Development

时间:2022-05-06
本文章向大家介绍Emacs setup for Go Development,主要内容包括概述、Emacs 和 GO 安装、Go 安装、配置Emacs Go IDE、go-eldoc、gofmt、goimports、godef、自定制编译命令、封装init-go.el、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

概述

最近在我个人笔记本搭建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-cC-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-cC-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就设置完成,请看一下效果。