Go:非本地包中的本地导入

Jac*_*ark 47 go

我有以下文件结构:

.
??? bin
?   ??? hello
??? pkg
??? src
    ??? jacob.uk.com
        ??? greeting
        ?   ??? greeting.go
        ??? helloworld.go

5 directories, 3 files
Run Code Online (Sandbox Code Playgroud)

随着以下GOPATH

/Users/clarkj84/Desktop/LearningGo
Run Code Online (Sandbox Code Playgroud)

在文件夹中执行/usr/local/go/bin/go install jacob.uk.com后src,我收到错误local import "./greeting" in non-local package

helloworld.go:

package main;
import "./greeting"

func main() {

}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 36

指定非本地包时,不能使用本地导入go install.如果希望本地导入工作,首先更改工作目录src/jacob.uk.com然后执行go install(不指定包).

当然,有了helloworld.go你提供的,你将得到一个编译错误:imported and not used.但是一旦你使用了导入greeting包中的东西,它就应该编译.

但是你根本不应该使用本地导入.而是写:

import "jacob.uk.com/greeting"
Run Code Online (Sandbox Code Playgroud)

这样你就可以从任何地方编译/运行/安装它.


use*_*610 23

键入go build不适用于相对导入路径; 你必须打字go build main.go.

go install 相对导入路径根本不起作用.

它记录在https://golang.org/cmd/go/#hdr-Relative_import_paths

看到

作出解释.

  • 谢谢!go build main.go工作。 (2认同)

Lin*_*nux 8

您可以在 go 1.11<= go.mod 中使用 replace 添加本地包并使用“replace”关键字,如下所示(您不需要创建 github repo,只需添加这样的行)

module github.com/yourAccount/yourModule

go 1.15

require (
    github.com/cosmtrek/air v1.21.2 // indirect
    github.com/creack/pty v1.1.11 // indirect
    github.com/fatih/color v1.9.0 // indirect
    github.com/imdario/mergo v0.3.11 // indirect
    github.com/julienschmidt/httprouter v1.3.0
    github.com/mattn/go-colorable v0.1.7 // indirect
    github.com/pelletier/go-toml v1.8.0 // indirect
    go.uber.org/zap v1.15.0
    golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a // indirect
)

replace (
    github.com/yourAccount/yourModule/localFolder =>"./yourModule/localFolder"
    github.com/yourAccount/yourModule/localFolder =>"./yourModule/localFolder"
)
Run Code Online (Sandbox Code Playgroud)

然后在你的 main.go =>

import (
    alog "github.com/yourAccount/yourModule/localFolder"
    slog "github.com/yourAccount/yourModule/localFolder"
)
Run Code Online (Sandbox Code Playgroud)