拉取单个go标准包的副本进行修改

Pull a copy of a single go standard package for modification

我想对 database/sql go 包做一些小的补充。我想尝试一下我的改变,看看它是如何工作的。

我认为我可以执行此命令以获取 database/sql 中的源副本,我可以使用它:

go get github.com/golang/go/tree/master/src/database/sql

然后,我打算将我的导入语句从

import "database/sql"

import "github.com/golang/go/tree/master/src/database/sql"

并在我的本地代码副本中放置调试 Printf 以确认正在执行我刚刚提取的新代码而不是 /usr/local/go 中的代码。

当我尝试上面的 "go get" 命令时,我收到此错误消息:

$ go get github.com/golang/go/tree/master/src/database/sql
package github.com/golang/go/tree/master/src/database/sql: cannot find package "github.com/golang/go/tree/master/src/database/sql" in any of:
    /usr/local/go/src/github.com/golang/go/tree/master/src/database/sql (from $GOROOT)
    /Users/me/go/src/github.com/golang/go/tree/master/src/database/sql (from $GOPATH)
$ echo $GOPATH
/Users/me/go
$

为什么这不起作用?

我也试过用

的源代码来做这个
https://go.googlesource.com/go/+/release-branch.go1.6/src/database/sql

那也没用。然后我尝试从上面的 link 下载源代码的 tgz,并将这些文件解压缩到我自己的 $GOPATH/src/github.com/database/sql 文件夹中,然后在那里构建它们。这产生了 sql.a 运行,但没有用。

正如 Godoc 所说

get         download and install packages and dependencies

你只能获取包和依赖项。但是你想要一个文件夹!您可以从 github 下载其 zip 文件并将其复制到该目的地。如果您想查看错误,可以使用错误类型。

例如sql.Openreturns*sql.DB,错误

db, err := sql.Open("mysql", "astaxie:astaxie@/test?charset=utf8")
if err != nil {
    fmt.Println(err)
}

您可以从源代码构建 Go,然后就地修改标准库,或者您可以供应特定的包。

如果您从源代码安装了 Go,编辑包后您可以像安装任何其他包一样使用 go install database/sql

安装新版本

如果您将 database/sql 包复制到 vendor 目录中,将构建并导入该副本以代替标准库中的版本。