Golang手动安装Github模块的方法

Golang手动安装Github模块的方法 尝试在无网络连接的隔离环境中使用 Github.com 的 go-sql-driver mysql。我可以让一个简单的 “hello world” Go 程序运行起来。我让管理员下载了上述模块/包,并将其复制到了 GOPATH/src/github.com/go-sql-driver/mysql。我的 MySQL 测试程序位于 GOPATH/src/m.go,并且在文件顶部有 "import ( _ "github.com/go-sql-driver/mysql")" 语句。当我执行 "go build m.go" 时,我得到…“no required module provides package …go-sql-driver mysql”。我在网上搜索过,关于手动安装的资料不多。我一直在使用 Python,但我需要处理 17 万亿条 RedShift 行数据,所以对速度有要求。非常感谢任何帮助。


更多关于Golang手动安装Github模块的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

澄清一下:从 RedShift(类似 PostgreSQL)读取数据,将结果写入 MySQL。我打算先从 MySQL 开始。希望这能有所帮助。Go 版本是 go1.20.12 linux/adm64。MySQL 已经安装,并且有很多人正在使用。

更多关于Golang手动安装Github模块的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好。你真的需要在机器上保留代码库吗?为什么不直接使用预编译的二进制文件呢?如果你确实需要,我建议使用 vendoring 而不是手动下载模块。你可以在其他地方创建项目并执行 go mod vendor,这会为你使用的包创建本地副本,然后你可以将其传输到目标机器。

func main() {
    fmt.Println("hello world")
}

在隔离环境中手动安装Go模块,可以通过以下步骤解决:

1. 创建本地模块代理

在可访问网络的机器上,使用 go mod vendor 创建完整的依赖副本:

# 在有网络的机器上执行
mkdir temp-project && cd temp-project
go mod init temp-project
go get github.com/go-sql-driver/mysql@latest
go mod vendor

2. 复制整个vendor目录到隔离环境

将生成的 vendor 目录完整复制到隔离环境的项目目录中。

3. 在隔离环境中配置go.mod

在隔离环境的项目目录中:

// go.mod
module your-project

go 1.21

replace github.com/go-sql-driver/mysql => ./vendor/github.com/go-sql-driver/mysql

4. 使用vendor模式构建

# 在隔离环境中
go build -mod=vendor m.go

或者设置环境变量:

export GOFLAGS="-mod=vendor"
go build m.go

5. 完整示例代码结构

GOPATH/
├── src/
│   ├── your-project/
│   │   ├── go.mod
│   │   ├── m.go
│   │   └── vendor/
│   │       └── github.com/
│   │           └── go-sql-driver/
│   │               └── mysql/
│   │                   ├── *.go
│   │                   ├── go.mod
│   │                   └── ...

6. 替代方案:使用replace指令直接指向本地路径

// go.mod
module your-project

go 1.21

replace github.com/go-sql-driver/mysql => /path/to/local/mysql-driver

然后构建:

go mod tidy
go build m.go

7. 验证示例代码

// m.go
package main

import (
    "database/sql"
    "fmt"
    "log"
    
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:password@/dbname")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
    
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Println("Successfully connected to MySQL")
}

关键点:确保 go.mod 文件存在并使用正确的 replace 指令,然后通过 -mod=vendor 或设置 GOFLAGS 来强制使用本地依赖。

回到顶部