一、参考
Becoming an emacs gopher
Emacs Golang开发环境配置指南
Stop debugging Go with Println and use Delve instead
Delve调试器
二、装置golang包
2.1 goimports
Command goimports updates your Go import lines, adding missing ones and removing unreferenced ones.
对于代码中引入的第三方模块,自动更新
goimports
命令能主动格式化代码,主动增加、移除imports
,而且与Emacs
集成良好。能够代替官网gofmt
命令。
GO111MODULE=on go get -u golang.org/x/tools/cmd/goimports
2.2 godef
Godef, given an expression or a location in a source file, prints the location of the definition of the symbol referred to.
对于代码中的函数援用,能够查看原始定义地位godef
命令能在Go
源码变量、函数定义间跳转,是查看变量、函数、文件定义的好助手
GO111MODULE=on go get -u github.com/rogpeppe/godef
2.3 gocode
An autocompletion daemon for the Go programming language
主动补全代码gocode
命令能为代码主动补全提供后盾反对,是Emacs
下Go
代码补全必不可少的backend
。
GO111MODULE=on go get -u github.com/nsf/gocode
三、装置emacs包
包名 | 形容 | 其余 |
---|---|---|
auto-Complete | An Intelligent auto-completion extension for Emacs | https://github.com/auto-compl… |
go-mode | Emacs mode for the Go programming language | https://github.com/dominikh/g… |
go-complete | Native Go completion for Emacs | https://github.com/vibhavp/go… |
go-autocomplete | auto-complete-mode backend for go-mode | https://melpa.org/#/go-autoco… |
autopair | Automagically pair braces and quotes in emacs like TextMate | https://github.com/joaotavora… |
;; Init the auto complete modules
(ac-config-default)
(global-auto-complete-mode t)
(require 'go-autocomplete)
;; Enable auto-complete
(auto-complete-mode 1)
;; Define keymaps
(define-key ac-mode-map (kbd "M-TAB") 'auto-complete)
(global-set-key (kbd"C-c C-c") 'godef-jump)
;; Set some quick config vals
(setq ac-auto-start 1)
(setq ac-auto-show-menu 0.8)
;; Just to make sure go tools are enabled
(add-to-list 'exec-path "~/go/bin")
;; Automatically format code on save
(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save)
(add-hook 'go-mode-hook 'auto-complete-for-go)
四、go-mode的命令
4.1 imports区域
(1) go-goto-imports
, 跳转到imports
区域
(2) go-import-add
, 增加新的import aaa
(3) go-remove-unused-imports
, 删除不再应用的包
4.2 godef
(1) go-jump
,跳转到表达式的定义
(2) godef-jump-other-window
,新建窗口,并跳转到表达式定义
4.3 function
(1) go-goto-arguments
, 跳转到函数的参数
(2) go-goto-docstring
跳转到函数的阐明文档,如果没有阐明文档,会创立
(3) go-goto-function
, 跳转到函数func
关键字,个别用于在函数文档中,跳转到函数代码
(4) go-goto-function-name
, 跳转到函数名称处
(5) go-goto-return-values
, 跳转到函数定义中的返回值处
(6) go-goto-method-receiver
, 跳转到函数的调用者处
4.4 其余
(1) pop-tag-mark
, 回退到前一个光标地位
(2) beginning-of-defun
, 跳转到函数的初始地位(适宜函数之间的跳转)
(3) end-of-defun
, 跳转到函数的完结地位
五、快捷键绑定
5.1 函数跳转和回退
;; Godef jump key binding
(global-set-key (kbd "M-,") 'godef-jump)
(global-set-key (kbd "M-.") 'pop-tag-mark)
5.2 代码块的跳转
C-M-a
跳转到上一个函数
C-M-e
跳转到下一个函数
5.3 代码正文
M-;
能够实现多行正文与解正文
六、debug
6.1 装置
GO111MODULE=on go get -u github.com/go-delve/delve/cmd/dlv
➜ ~ dlv version
Delve Debugger
Version: 1.6.0
Build: $Id: 8cc9751909843dd55a46e8ea2a561544f70db34d $