emacs로 go언어 개발환경 구축하기 (2)

Posted by 곰도리네
2017.11.14 14:46 Computing&IT/프로그래밍 - golang

 emacs로 go언어 개발환경 구축하기 (1)  에 이어서 씁니다. 본 tutorial은 windows10 64bit에서 확인된 것입니다.



3. go 다운로드 및 설치, 환경설정하기


emacs의 gomode를 통해서 go언어 개발환경을 구축하기에 앞서서 go를 다운로드해야 합니다. 


go는 여기에서 다운로드합니다. 자신의 시스템에 맞는 버전을 선택하시면 됩니다.


Windows환경에서 go를 설치하고나면 환경설정을 해 주어야 합니다.


제어판\시스템 및 보안\시스템 -> 고급시스템설정 -> 환경설정 -> 시스템변수 에 들어갑니다. 아래 창입니다.




환경변수 창에서 GOPATH, GOROOT 없다면 아래와 같이 적당하게 적어줍니다. 


아마 GOROOT는 go인스톨러가 이미 작성해두었을 겁니다. 


GOPATH는 사용자가 임의로 생성한 Go 어플리케이션들의 저장소입니다. 


저의 경우에는 C:\USER\KIM\아래에 GO라는 폴더를 만들었고 이를 GOPATH로 명명했습니다.


 


변수 path에도 이미 go 인스톨러가 bin path를 등록해뒀을겁니다. 확인해 봅시다.



설정이 옳게 되었다면 cmd창에서 go env 명령어에 대한 응답으로 아래와 같이 출력되어야 합니다.



특히 신경써야 하는 부분이 GOPATH GOROOT입니다. 두가지가 정확히 들어와있는지 확인합니다.


4. git 설치


git for windows를 설치합니다. git for windows는 여기서 다운받습니다. 


git를 설치하는 이유는 emacs go-mode를 구동하는데 필요한 go app들을 github 등에서 다운로드해야하기 때문입니다. 


설치과정은 생략합니다. 설치옵션은 기본으로 나타난대로 확인해주시면됩니다. 별달리 바꿀 것은 없어요.


git에 대해서만도 강좌하나 개설해서 설명해야할만큼 방대하기때문에 간단히 넘어갑시다.


5. emacs go-mode설치


아래의 명령들을 통해서 go-mode설치에 앞서 필요한 go app 들을 설치합니다. go app들은 위에서 설정한 GOPATH 내에 위치하게됩니다. 


GOPATH는 추후 설명하겠지만 src, bin, pkg폴더로 구성되는데 go get 명령으로 git 리포지터리에서 src로 자동으로 소스코드를 가져온 후 컴파일해서 bin에 실행파일을 두게 됩니다. 이 과정에서 사용자의 개입은 없습니다.


 
\ go get -u golang.org/x/tools/cmd/...
\ go get -u github.com/rogpeppe/godef/...
\ go get -u github.com/nsf/gocode
\ go get -u golang.org/x/tools/cmd/goimports
\ go get -u golang.org/x/tools/cmd/guru
\ go get -u github.com/dougm/goflymake 


뒤의 ... 도 명령어니까 생략하지마시구요.


위의 go app들이 설치되었다면 이제 emacs로 다시 넘어갑시다.


Alt+x 한 후 package-install 통해서 아래의 패키지들을 설치합니다.



go-mode
exec-path-from-shell
auto-complete
go-autocomplete
flymake-go
neotree
atom-one-dark-theme

그리고 아래의 내용을 init.el에 추가해줍니다. init.el 파일이 뭔지, 어떻게 작성해야하는지는 여기를 참조하시면 됩니다.



;; High level aesthetic stuff
(tool-bar-mode -1)                  ; Disable the button bar atop screen
(scroll-bar-mode -1)                ; Disable scroll bar
(setq inhibit-startup-screen t)     ; Disable startup screen with graphics
(set-default-font "Monaco 12")      ; Set font and size
(setq-default indent-tabs-mode nil) ; Use spaces instead of tabs
(setq tab-width 2)                  ; Four spaces is a tab
(setq visible-bell nil)             ; Disable annoying visual bell graphic
(setq ring-bell-function 'ignore)   ; Disable super annoying audio bell

;; Make keyboard bindings not suck
(setq mac-option-modifier 'super)
(setq mac-command-modifier 'meta)
(global-set-key "\M-c" 'copy-region-as-kill)
(global-set-key "\M-v" 'yank)
(global-set-key "\M-g" 'goto-line)

;; Set up package repositories so M-x package-install works.
(require 'package) 
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

(load-theme 'atom-one-dark t)       ; Color theme installed via melpa

;; Add a directory to the load path so we can put extra files there
(add-to-list 'load-path "~/.emacs.d/lisp/")

;; Snag the user's PATH and GOPATH
(when (memq window-system '(mac ns))
  (exec-path-from-shell-initialize)
  (exec-path-from-shell-copy-env "GOPATH"))

;; Define function to call when go-mode loads
(defun my-go-mode-hook ()
  (add-hook 'before-save-hook 'gofmt-before-save) ; gofmt before every save
  (setq gofmt-command "goimports")                ; gofmt uses invokes goimports
  (if (not (string-match "go" compile-command))   ; set compile command default
      (set (make-local-variable 'compile-command)
           "go build -v && go test -v && go vet"))

  ;; guru settings
  (go-guru-hl-identifier-mode)                    ; highlight identifiers
  
  ;; Key bindings specific to go-mode
  (local-set-key (kbd "M-.") 'godef-jump)         ; Go to definition
  (local-set-key (kbd "M-*") 'pop-tag-mark)       ; Return from whence you came
  (local-set-key (kbd "M-p") 'compile)            ; Invoke compiler
  (local-set-key (kbd "M-P") 'recompile)          ; Redo most recent compile cmd
  (local-set-key (kbd "M-]") 'next-error)         ; Go to next error (or msg)
  (local-set-key (kbd "M-[") 'previous-error)     ; Go to previous error or msg

  ;; Misc go stuff
  (auto-complete-mode 1))                         ; Enable auto-complete mode

;; Connect go-mode-hook with the function we just defined
(add-hook 'go-mode-hook 'my-go-mode-hook)

;; Ensure the go specific autocomplete is active in go-mode.
(with-eval-after-load 'go-mode
   (require 'go-autocomplete))

;; If the go-guru.el file is in the load path, this will load it.
(require 'go-guru)

일단 기본적인 설정은 마쳤습니다.


좀더 customizing하기 위해서는 위의 init.el파일을 더 손 보아야 합니다.


다음시간으로 미룹니다.



참조 : https://johnsogg.github.io/emacs-golang

이 댓글을 비밀 댓글로

티스토리 툴바