This is a quick note to future me (and anyone encountering this same issue). TL;DR - the solution
While running into issues getting the golang layer configured, I discovered that a lot of pain was caused by a cached configuration and some outdated information.
- OS: Darwin
- Golang: go version go1.10.3 darwin/amd64 (installed via Homebrew)
- Emacs: 26.1
- Spacemacs: 0.300.0 (develop)
- Spacemacs branch: f2a4cc
- Graphics display: t
- Distribution: Spacemacs
- Editing style: vim
- Completion: helm
html helm auto-completion emacs-lisp git go markdown (markdown :variables markdown-command "pandoc") (org :variables org-enable-reveal-js-support t org-want-todo-bindings t) themes-megapack spell-checking syntax-checking )
Incorrectly configured $GOROOT
brew install go, Homebrew suggests the following:
You may wish to add the GOROOT-based install location to your PATH: export PATH=$PATH:/usr/local/opt/go/libexec/bin
I had originally set this, but this caused all sorts of problems such as the
go get packages with complaints that the standard library
packages couldn’t be found. I suspect this is due to go having problems dealing
with symlinks, as running
ls -lat /usr/local/opt/go shows that folder is
/usr/local/Cellar/go/1.10.3. To fix this, I changed my $GOROOT
/usr/local/Cellar/go/1.10.3/libexec. This appears to be the right solution,
although I’m concerned that I will need to change this every time I upgrade go.
First off, the Spacemacs go layer documentation incorrectly states the “oracle” package is a pre-requisite. This package was obsoleted at the end of 2016 perthis Stack Overflow post. The solution is to instead install the “guru” package which has replaced it using:
go get -u -v golang.org/x/tools/cmd/guru
Spacemacs wasn’t pulling in my correct
$GOROOT environment variable, which
I verified by enabling syntax checking (
SPC t s) while in a .go file.
Some furious befored-bed Googling led to the following issues:
- Develop: Go layer tools doesn’t work
- New env var caching breaks git gpg signing
- Github: How do I set $GOPATH properly for Emacs?
The next problem was getting Spacemacs to pull the updated $GOROOT from my
environment definition. Up until now, I’ve been configuring my shell using
~/.zshrc.After reading the Spacemacs
FAQ about environment variables, I’ve moved the contents of my
~/.zshenv so that variables are sourced unconditionally (instead
of only for interactive shells).
This solves the problem of where to put my $GOROOT definition, but it still wasn’t being pulled into Spacemacs properly. This comment by@ljupchokotev is what finally pointed me in the right direction: the Spacemacs environment file.
Spacemacs pulls environment variables intelligently from your shell config file and stores them in ~/.spacemacs.env Sometimes this file has old contents and must be re-created
- Set the proper $GOROOT for go installed via Homebrew:
export PATH=$PATH:/usr/local/Cellar/go/<go version>/libexec
- Optional: set this in
- Optional: set this in
~/.spacemacs.envand restart Emacs.