从emacs调用goimports时,其行为不同

从emacs调用goimports时,其行为不同,emacs,go,Emacs,Go,我正在观察从emacs调用的goimports命令的一个令人费解的行为。我使用的是svgo包,以及doc imports github.com/ajstarks/svgo中的一个最小程序示例 代码运行良好。goimports命令是一个用于修复自动添加、删除Go导入的工具。因为需要github.com/ajstarks/svgo,所以我不希望goimports删除它。当我从终端呼叫它时,这是真的: $ head gg.go package main import ( "os"

我正在观察从emacs调用的goimports命令的一个令人费解的行为。我使用的是svgo包,以及doc imports github.com/ajstarks/svgo中的一个最小程序示例

代码运行良好。goimports命令是一个用于修复自动添加、删除Go导入的工具。因为需要github.com/ajstarks/svgo,所以我不希望goimports删除它。当我从终端呼叫它时,这是真的:

$ head gg.go 

package main

import (
    "os"
    "github.com/ajstarks/svgo"
)


func main() {
然后:

正如预期的那样,它只是在标准库之后重新安排导入,然后是外部包。有趣的是:当我从emacs调用goimports时,它删除了github.com/ajstarks/svgo行!程序不再编译

以下是我的.init文件的相关部分:

(setq exec-path (cons "/usr/local/go/bin" exec-path))
(add-to-list 'exec-path "~/go/bin")

(defun my-go-mode-hook ()
  (setq gofmt-command "goimports")  ; Use goimports instead of go-fmt
  (add-hook 'before-save-hook 'gofmt-before-save))

(add-hook 'go-mode-hook 'my-go-mode-hook)
如果我对setq gofmt命令goimports行进行注释,svgo导入不会被删除


这怎么可能

您的emacs是否继承或使用与当前会话相同的GOPATH,您在当前会话中手动调用goimport?您是否可以先尝试go安装您的小程序,然后切换回Emacs以查看问题是否仍然存在?$export GOPATH=/usr/local/go/src&&Emacs,然后重试
(setq exec-path (cons "/usr/local/go/bin" exec-path))
(add-to-list 'exec-path "~/go/bin")

(defun my-go-mode-hook ()
  (setq gofmt-command "goimports")  ; Use goimports instead of go-fmt
  (add-hook 'before-save-hook 'gofmt-before-save))

(add-hook 'go-mode-hook 'my-go-mode-hook)