概述

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 个坑, 耗费了大半天的时间…

golang module 在 spacemcs 中的配置的更多相关文章

  1. setup 命令中防火墙配置选项无法打开

    故障提示 1.1 如何让setup 命令中防火墙配置生效 1.1.1 CentOS系统找不到setup命令工具的解决方法 yum -y install setuptool #安装setup命令工具 y ...

  2. SiteMesh在项目中的配置

    SiteMesh在项目中的配置 首先在web.xml里面增加siteMesh的配置: <filter> <filter-name>sitemesh</filter-nam ...

  3. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...

  4. git在eclipse中的配置 转载

    git在eclipse中的配置 转载 一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EG ...

  5. How to Configure Eclipse for Python --- 在eclipse中如何配置pydev

    From: http://www.rose-hulman.edu/class/csse/resources/Eclipse/eclipse-python-configuration.htm Pytho ...

  6. tp5中nginx配置

    首先tp5的访问目录指向到webroot/public文件夹中. thinkphp的url访问:http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参 ...

  7. vue-cli中webpack配置解析

    版本号 vue-cli 2.8.1 (终端通过vue -V 可查看) vue 2.2.2 webpack 2.2.1 目录结构 ├── README.md ├── build │ ├── build. ...

  8. golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的

    golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...

  9. maven的安装、路径配置、修改库文件路径和eclipse中的配置、创建maven工程。

    注:本文来源于:杨四郎2018  <maven的安装.路径配置.修改库文件路径和eclipse中的配置.创建maven工程> 一.maven的安装 首先,先到官网去下载maven.这里是官 ...

随机推荐

  1. js scroll事件

    滚动改变头部颜色,当滚动到最顶端头部颜色还原 滚动前 滚动后 代码

  2. IT兄弟连 HTML5教程 HTML和CSS的关系

    HTML是描述网页的标记语言,是将内容放到网页上,虽然HTML本身也自带一些样式功能,通过自身的属性,来实现一些特定的效果,制作出来的只能是一个网页,而不是一个美观的网页.最主要的是在HTML里面,一 ...

  3. 【mysql报错】[Err] 1248 - Every derived table must have its own alias

    当我运行一条联合查询的sql语句时报如下错误: [Err] 1248 - Every derived table must have its own alias,大概意思是每一张派生表必须要有自己的别 ...

  4. DOS命令行操作MySQL常用命令

    平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...

  5. 使用Node.js简单创建一个服务器

    首先,我们要了解Node.js不是一种语言,它只是一个除了浏览器之外的,可以运行js的环境. 其次,Node能做些什么 ? web服务器.  命令行工具.   网络爬虫. 桌面应用程序开发等 3.接下 ...

  6. FCC---Learn How Bezier Curves Work---定义坐标轴点的值,影响斜率,改变速度。具体调试换值既可以体会

    The last challenge introduced the animation-timing-function property and a few keywords that change ...

  7. Java实现单链表反转操作

    单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...

  8. Ajax错误

    如果ajax访问不到后台对应的controller的方法,直接报错,首先查看url访问路径,如果路径没错误,再利用谷歌开发者工具来运行一下,是否存在基本语法错误,比如字符写错了,多一个少一个逗号, 如 ...

  9. 1.JavaCC安装与测试

      下面介绍的是JavaCC在windows系统中的安装与小代码测试过程. 一.JavaCC安装   步骤 :在JavaCC的官网首页下载JavaCC,然后配置电脑的环境变量,接着在dos命令行里就可 ...

  10. ORA-01555 When Max Query Length Is Less Than Undo Retention, small or 0 Seconds (Doc ID 1131474.1)

    ORA-01555 When Max Query Length Is Less Than Undo Retention, small or 0 Seconds (Doc ID 1131474.1) A ...