我遇到了可能是 Gopls 语言服务器问题:在 VSCode 中使用带有 Go 扩展的 Go 模块时,我的所有外部包导入语句都被标记为不正确。这正是我到目前为止所做的:
在我的 GOPATH/src/github.com/Kozie1337/projectname 中:
go mod init github.com/Kozie1337/projectname
go get -u github.com/gorilla/mux
go.main 里面:
package main
import (
"log"
"net/http"
"github.com/gorilla/mux" // This is being marked as wrong with the err. msg. down below
)
func main() {
r := mux.NewRouter() // This actually works, even though the go linter says that mux isn't imported
http.ListenAndServe(":9000", r)) // server starts too with mux routes
}
[...]
Run Code Online (Sandbox Code Playgroud)
将鼠标悬停在github.com/gorilla/mux
导入语句上时,出现错误:
could …
Run Code Online (Sandbox Code Playgroud) 在 Go 1.17 中,go.mod 有两个部分,直接依赖项和间接依赖项,但是没有指示间接依赖项与直接依赖项如何相关。
我如何找出特定的间接依赖关系是哪个或哪些模块使用它?
我使用此命令"go mod init database"在"database"文件夹中的"GOPATH"之外创建了一个库作为个人使用的模块,我不知道:
操作系统:Windows 7,Go:v1.11
我分叉一个前进模块,并希望用叉子在我的项目使用版本控制模块通过v1.12
。我的代码不在我的GOPATH
.
我的项目go.mod
:
module github.com/me/myproj
go 1.12
require (
go.larrymyers.com/protoc-gen-twirp_typescript v0.0.0-20190605194555-ffbfe407b60f
)
replace go.larrymyers.com/protoc-gen-twirp_typescript => github.com/rynop/protoc-gen-twirp_typescript master
Run Code Online (Sandbox Code Playgroud)
protoc-gen-twirp_typescript 是一个工具protoc
,所以这是我的tools.go
:
// +build tools
package tools
import (
// protocol buffer compiler plugins
_ "github.com/golang/protobuf/protoc-gen-go"
_ "github.com/mwitkow/go-proto-validators/protoc-gen-govalidators"
_ "github.com/twitchtv/twirp/protoc-gen-twirp"
_ "github.com/rynop/protoc-gen-twirp_typescript"
)
Run Code Online (Sandbox Code Playgroud)
当我运行go mod tidy
下载依赖项时,出现此错误:
go: finding github.com/rynop/protoc-gen-twirp_typescript master
go: finding github.com/rynop/protoc-gen-twirp_typescript latest
go: github.com/rynop/protoc-gen-twirp_typescript@v0.0.0-20190618203538-a346b5d9c8fb: parsing go.mod: unexpected module path "go.larrymyers.com/protoc-gen-twirp_typescript"
Run Code Online (Sandbox Code Playgroud)
给定一个 Golang (1.14+) 项目,该项目使用测试依赖项(如 github.com/stretchr/testify),现在假设该项目是一个可供其他人使用的公共库。
通常,当我现在使用时,go mod graph
我总是会看到这种依赖关系,例如:
github.com/its-me/my-great-library@1.0.0
github.com/stretchr/testify@v1.6.1 github.com/davecgh/go-spew@v1.1.0
github.com/stretchr/testify@v1.6.1 github.com/pmezard/go-difflib@v1.0.0
github.com/stretchr/testify@v1.6.1 github.com/stretchr/objx@v0.1.0
github.com/stretchr/testify@v1.6.1 gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c
gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405
Run Code Online (Sandbox Code Playgroud)
go mod tidy
或者go mod download
似乎还从使用的库下载所有测试依赖项。exclude
但不是告诉每个人在他们的文件中使用,go.mod
有没有办法甚至阻止它被导出?
$去版本 1.13.3
我有一个文件夹结构如下:
GOPATH
+---src
+--- my-api-server
+--- my-auth-server
+--- main.go
+--- my-utils
+--- uuid
+--- uuid.go
Run Code Online (Sandbox Code Playgroud)
my-auth-server
使用my-api-server/my-utils/uuid
作为depenency
现在,当我使用基于 GOPATH 的模块系统时,效果很好。但是,使用转到模块时,当我运行go run main.go
在my-auth-server
它返回的错误:
build command-line-arguments: cannot load my-api-server/my-utils/uuid: malformed module path "my-api-server/my-utils/uuid": missing dot in first path element
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我们有一个只能通过 ssh/git (无 https)访问的私有代码存储库,并且我们希望在那里托管我们的 go 代码/模块。
首先我尝试:
git config --global url."git@code.internal.local:".insteadOf "https://code.internal.local/"
Run Code Online (Sandbox Code Playgroud)
因此,以下两项都可以正常工作:
git clone git@code.internal.local:reponame.git
git clone https://code.internal.local/reponame
但go get code.internal.local/reponame
失败了,因为 go 仍然坚持尝试 https://...而不是 git。
package code.internal.local/reponame: unrecognized import path "code.internal.local/reponame": https fetch: Get "https://code.internal.local/reponame?go-get=1": dial tcp 192.168.0.5:443: i/o timeout
Run Code Online (Sandbox Code Playgroud) 我已经将项目升级到Go 1.11并为我的项目启用了模块支持,但似乎CircleCI正在重新下载每个构建的依赖项.我知道CircleCI允许在重建之间进行缓存,所以我查看了Go模块的文档,虽然它提到了缓存,但我似乎无法找到它实际存在的位置.
Go模块的源缓存在哪里?
看来该godoc
工具不支持Go模块。
一个简单godoc -goroot=.
的文件服务于项目文件,但它不会生成软件包的文档。我从projects源目录对它进行了测试,该目录还存储了go.mod
和go.sum
模块文件。
如何为Go模块内部的所有软件包生成文档$GOPATH
?
在Go 1.12的发行说明中,该godoc
工具将不包含在以后的Go版本中,并且只能go get
在Go 1.12之后使用。一个应该使用Go go doc
命令。但是,go doc
不会生成“很容易阅读”的HTML页面。从Go源代码生成输出HTML或Markdown的文档是否有替代方法?
我正在尝试将 go.sum 的行为go mod tidy
(以及 go.sum 的结果内容)与 的输出进行比较go list -m all
。\n阅读文档,我了解 go.sum 包含 go.mod 和依赖项中声明的依赖模块的完整列表\' go.mod 文件,go list -m all
显示执行过程中真正加载的模块。\n例如,一个包含 logrus 和 prometheus 的应用程序如下所示:
go.mod
\nmodule mytest\n\ngo 1.14\n\nrequire (\n github.com/prometheus/common v0.4.0\n github.com/sirupsen/logrus v1.8.1\n)\n
Run Code Online (Sandbox Code Playgroud)\n主程序
\npackage main\n\nimport "github.com/sirupsen/logrus"\nimport "github.com/prometheus/common/version"\n\nfunc main() {\n logrus.Info("Hello World")\n logrus.Infof("Prometheus info: %v", version.Info())\n}\n
Run Code Online (Sandbox Code Playgroud)\n之后go mod tidy
,go.sum 显示了 go.mod 请求的 logrus v1.8.1 和 prometheus v0.4.0 的依赖项 1.2.0;go list -m all
仅显示 v1.8.1。
总和 …