设为首页 加入收藏

TOP

golang module 在 spacemcs 中的配置(一)
2019-09-14 00:51:11 】 浏览:147
Tags:golang module spacemcs 配置

概述

golang 官方的包管理从 1.11 版本就开始支持了, 之前尝试了几次, 效果都不理想, 就一直用 dep 来管理 package.

最近 1.13 版本发布了, 使用 go module 的官方管理方式越来越多, dep 也早就不在继续开发了. 鉴于此, 是时候把 golang 的包管理方式迁移到 go module 上来了.

我一直是用 spacemacs 来开发各种应用, 所以本文也是介绍如何在 spacemacs 中配置 golang module 的开发环境.

配置方法

go module 其实本身是不需要什么配置, 这里的配置其实为了更方便的编码而做的 spacemacs 配置. 能够让它支持自动补全, 代码调转等等开发时常用的操作.

需要的软件

使用 go module, golang 的工程不用在放在 GOPATH 下, 所有传统的 gocode 不能再用来做代码补全这些了. 我们这里采用 gopls 来代替 gocode.

出来 golang 1.13, 额外需要的软件就是 gopls

安装好 golang 1.13, 安装 gopls 非常简单:

$ GO111MODULE=on go get golang.org/x/tools/gopls@latest

spacemacs 的配置

go layer

spacemacs 的 develop 分支默认继承了 lsp 的功能. LSP 是什么 所以配置起来很简单, 在 dotspacemacs-configuration-layers 下配置:

dotspacemacs-configuration-layers
'(
  ... ...
  lsp
  ;; ----------------------------------------------------------------
  ;; Example of useful layers you may want to use right away.
  ;; Uncomment some layer names and press `SPC f e R' (Vim style) or
  ;; `M-m f e R' (Emacs style) to install them.
  ;; ----------------------------------------------------------------

  (go :variables
      go-backend 'lsp
      go-tab-width 8
      godoc-at-point-function 'godoc-gogetdoc)
 ... ...
 )

lsp-mode

lsp-mode 是 emacs 对 lsp 的封装, 参考其中 golang 的部分, 在 dotspacemacs/user-config 中配置:

;; lsp
(use-package lsp-mode
  :hook (go-mode . lsp-deferred)
  :commands (lsp lsp-deferred))

(setq lsp-auto-guess-root nil)
(setq lsp-ui-doc-enable nil)
(setq lsp-ui-sideline-enable nil)
(setq lsp-prefer-flymake :none)

project root 设置

使用 go module 之后, golang 项目的目录不一定在 GOPATH 下, 所以定义了个配置 project root 的函数. 当然, 如果不设置, 默认值是 emacs 的 projectile-project-root

;; project path settings
(setq current-project-path (projectile-project-root))

(defun set-project-path (relative-path)
  (interactive
   (list (read-string "relative path: " "." nil nil nil)))
  (setq current-project-path (file-truename relative-path)))

(defun get-project-path ()
  (interactive)
  (message current-project-path))

build/install 快捷键

增加 2 个快捷键, 用来执行 go buildgo install

;; go build/install
(setq default-go-package "")

(defun go-build (&optional pkg)
  (interactive
   (list (read-string (format "Package Name[%s]: " default-go-package) nil nil "")))

  (if (not (string= pkg ""))
      (setq default-go-package pkg))

  (if (string= current-project-path "")
      (message "You MUST set current-project-path FIRST!")
    (projectile-with-default-dir current-project-path
      (projectile-run-compilation (concat "go build " default-go-package))))
  )

(defun go-install (&optional pkg)
  (interactive
   (list (read-string (format "Package Name[%s]: " default-go-package) nil nil "")))

  (if (not (string= pkg ""))
      (setq default-go-package pkg))

  (if (string= current-project-path "")
      (message "You MUST set current-project-path FIRST!")
    (projectile-with-default-dir current-project-path
      (projectile-run-compilation (concat "go install " default-go-package))))
)

;; set shortcuts
(spacemacs/set-leader-keys-for-major-mode 'go-mode
  "xi" 'go-install)

(spacemacs/set-leader-keys-for-major-mode 'go-mode
  "xb" 'go-build)

go buildgo install 的快捷键分别是: SPC m x bSPC m x i

使用中遇到的坑

在尝试使用的过程中, 遇到 2 个坑, 耗费了大半天的时间… :(

错误内容: LSP : main.go not in project or it is blacklisted

在 spacemacs 的

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go从入门到放弃 下一篇[系列] go-gin-api 路由中间件 - ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目