想象一下你在核战争中幸存下来,你必须不惜一切代价重新配置 golang 程序以使用本地模块

xak*_*p35 -10 import package go end-of-life survival

问题焦点在标题末尾。尽了我的想象。

想象一下,你在核战争中幸存下来,你只是幸存者团队,在你的自动化保险库中,偶尔用 golang 编写操作逻辑。

现在,由于(现在众所周知的)代码错误,您的金库在氧气供应方面(金库内)出现了一些问题。作为程序员,您应该明确修复它!你一定有一个问题,定义什么github.com/...或者mydomain.com是,有没有上网了,无论你想在本地与域打扰!

您有以下文件夹结构:

vault/
    main.go
    oxygenapi/
        oxygenapi.go
Run Code Online (Sandbox Code Playgroud)

在里面main.go你确实有:

package main

import "./oxygenapi"

...
Run Code Online (Sandbox Code Playgroud)

oxygenapi.go开始于:

package oxygenapi

...
Run Code Online (Sandbox Code Playgroud)

通常情况下,不会喜欢模拟本地git服务器(git 源被烧毁,在核战争期间,它们没有单一源,并且您在 git 上拥有所有内容,只是您工作源树的一些本地副本)

您现在只想导入系统工作,因为它与氧气供应有关。你没时间了!现在,想象一下尽快恢复它是至关重要的!

但是您不能再重新编译它,因为不再存在互联网。它给出以下错误:

D:\vault> go run .
build _/D_/vault/oxygenapi: cannot find module for path _/D_/vault/oxygenapi
Run Code Online (Sandbox Code Playgroud)

我应该用 C 编写它吗?PASCAL?VISUAL BASIC?为什么我们选择了 go?.. 这种语言应该继续存在吗?

xar*_*lus 6

当然可以完全离线使用 Go,包名中的域只是名称。

您应该使用 设置一个 Go 模块go mod init somename,其中 somename 是您可以选择的名称。通常这是一个域名;但是,该命令甚至不检查它是否存在。

之后,您应该能够使用路径somename/oxygenapi(from main.go)导入您的子模块。

一旦您使用 下载了您的依赖项go mod vendor,您的构建过程就可以用于go build -mod vendor构建程序 - 永远无需连接到互联网。另见:

您可以在 Go wiki上找到更多信息,更专门针对您的用例,这里有关于为什么您的设置现在不起作用的答案

还有一个关于如何在本地/离线使用包的问题,这使得可以将项目目录移动到另一台电脑而无需在另一台机器上获取任何东西。