心心失意 发表于 2018-9-20 07:50:04

Emacs golang 配置

  在配置前需要下载用到的包:


[*]godoc
[*]godef
[*]gocode
[*]oracle
  在下载包之前需要设置好环境变量:
  

# Golang  
export GOROOT
=$HOME/go  
export GOPATH
=$HOME/development/go  
export PATH
=$PATH:$GOROOT/bin  
export PATH
=$PATH:$GOPATH/bin  

  如果网络良好的话使用这种方法:
  godoc:
  

go get golang.org/x/tools/cmd/godoc  

  这样会将godoc二进制文件安装到$GOROOT/bin目录里。
  godef:
  

go get github.com/rogpeppe/godef   

  这样会将godef二进制文件安装到$GOPATH/bin目录里。
  gocode 自动完成:
  

go get -u github.com/nsf/gocode  

  这样会将gocode二进制文件安装到$GOPATH/bin目录里。
  go oracle
  

go get golang.org/x/tools/cmd/oracle  

  oracle二进制文件将出现在$GOPATH/bin目录里,将它移动到$GOROOT/bin目录里。
  下面是emacs的golang配置:
  

;;; init-go --- golang  
;;; Commentary:
  
;; http:
//tleyden.github.io/blog/2014/05/22/configure-emacs-as-a-go-editor-from-scratch/  
;; https://robinxiong.gitbooks.io/golang/content/section1/emacs.html
  
;; http://studygolang.com/topics/583
  

  
;;; Code:
  

  
(require-package 'go-mode)
  
(require-package 'company-go)
  

  
(require 'go-mode)
  

  
;; removes all unused imports
  
(add-hook 'go-mode-hook '(lambda() (local-set-key (kbd "C-c C-r")'go-remove-unused-imports)))
  

  
;; format the current buffer
  
(add-hook 'go-mode-hook '(lambda () (local-set-key (kbd "C-c C-f") 'gofmt)))
  

  
;; format the buffer when save
  
(add-hook 'before-save-hook 'gofmt-before-save)
  

  
;; show the go documentation for a given package
  
;; Note: godoc depends on the godoc utility.
  
;; It must be installed and on your $PATH.
  
;; To install it run: go get code.google.com/p/go.tools/cmd/godoc.
  
(add-hook 'go-mode-hook '(lambda() (local-set-key (kbd "C-c C-k") 'godoc)))
  

  
;; Gocode autocomplete
  
;;(add-hook 'go-mode-hook 'company-mode)
  
(add-hook 'go-mode-hook '(lambda()
  
(set (make-local-variable 'company-backends)'(company-go))
  
(company-mode)))
  

  
;; Go oracle
  
;; Note: $GOPATH will defined in init-exec-path-from-shell
  
(load-file "$GOPATH/src/golang.org/x/tools/cmd/oracle/oracle.el")
  
(add-hook 'go-mode-hook 'go-oracle-mode)
  

  
(provide 'init-go)
  
;;; init-go.el ends here
  

  

;;; init-exec-path-from-shell --- exec path form shell  
;;; Commentary:
  
;; Let Emacs use .bashrc
file,especially system $PATH.  
;;; Code:
  

  
(require
-package 'exec-path-from-shell)  

  
(when (memq window-system '(mac ns x))
  
(exec-path-from-shell-initialize))
  

  
;;; for golang
  
(exec-path-from-shell-copy-env "GOPATH")
  

  
(provide 'init-exec-path-from-shell)
  
;;; init-exec-path-from-shell.el ends here
  

  另一种方法:
  注意:从github克隆的golang.org应该放在src目录里!
  

~/development/go/srcᐅ git clone https://github.com/golang/tools golang.org/x/tools  
正克隆到 'golang.org/x/tools'...
  
remote: Counting objects: 15398, done.
  
接收对象中:   8% (1232/15398), 404.01 KiB | 69.00 KiB/s
  

  编译godoc:
  

go build golang.org/x/tools/cmd/godoc  

  注意:编译出的godoc二进制文件应该放在 ~/development/go/bin目录里!
  安装golang教程(这个是英文版的):
  

git clone https://github.com/golang/tour  

  

go build golang.org/x/tour/gotour  
golang.org
/x/tools/playground/socket/socket.go:37:2: cannot find package "golang.org/x/net/websocket" in any of:  

/home/z/go/src/golang.org/x/net/websocket (from $GOROOT)  

/home/z/development/go/src/golang.org/x/net/websocket (from $GOPATH)  

  怎么办?
  

ᐅ git clone https://github.com/golang/net  注意:gotour和net这2个目录和tools目录是平级的,它们都在$GOPATH/src/golang.org/x 目录下。
x  ├── net
  ├── tools
  └── tour
  
ᐅ go build golang.org/x/tour/gotour
  

  安装中文版的教程:
  

git clone https://github.com/Go-zh/tour github.com/Go-zh/tour  
git clone https://github.com/Go-zh/tools github.com/Go-zh/tools
  

  注意tour和tools是同级目录。
  github.com/Go-zh
  ├── tools
  └── tour
  编译中文版教程:
  

go build github.com/Go-zh/tour/gotour   

  这时会在$GOPATH/src目录中出现一个gotour二进制文件,把它剪切到$GOPATH/bin目录中并重命名为gotour-zh。
  在$GOPATH/bin中执行:./gotour-zh 即可开启浏览器。
  安装godef:
  

git clone https://github.com/rogpeppe/godef github.com/rogpeppe/godef  

  

go build github.com/rogpeppe/godef  github.com/rogpeppe/godef/acme.go:11:2: cannot find package "9fans.net/go/acme" in any of:
  /home/z/go/src/9fans.net/go/acme (from $GOROOT)
  /home/z/development/go/src/9fans.net/go/acme (from $GOPATH)
  

  解决方法:
  

git clone https://github.com/9fans/go 9fans.net/go   

  然后再编译安装godef:
  

go build github.com/rogpeppe/godef  

  参考:
  http://studygolang.com/topics/583
  http://tleyden.github.io/blog/2014/05/22/configure-emacs-as-a-go-editor-from-scratch/ https://robinxiong.gitbooks.io/golang/content/section1/emacs.html
  --End--


页: [1]
查看完整版本: Emacs golang 配置