当前位置: 首页 > 面试题库 >

如何处理go导入绝对路径和github分支?

公西毅
2023-03-14
问题内容

围绕此有很多问题,包括为什么不应该使用import "./my/path"以及为什么它只能工作,因为某些传统的go代码需要它。

如果这是正确的,那么您如何处理项目的封装,以及如何通过github分支进行封装?在其他每个lang中,我都可以做一个项目的github分支或git
clone,所有内容都封装在那里。我如何从go项目中获得相同的行为?

使用go“ hello world”示例的简单示例。

你好

package main

import ("fmt"
    "github.com/golang/examples/stringutil")

func main() {
    fmt.Printf(stringutil.Reverse("hello, world")+"\n")
}

上面的作品很棒。但是,如果我想使用自己的stringutil(位于子目录中并将编译为单个二进制文件),则 需要完整路径:

package main

import ("fmt"
    "github.com/myrepo/examples/util/stringutil")

func main() {
    fmt.Printf(stringutil.Reverse("hello, world")+"\n")
}

现在,如果有人复制或分叉我的存储库, 即使它完全在内部使用 ,它也直接依赖于“ github.com/myrepo/”

如果要导入20个不同的文件utils/怎么办?每当有人分叉时,我都需要更改每一个?那是很多无关紧要的更改,而且是毫无意义的git commit。

我在这里想念什么?为什么相对路径这么糟糕?如何在不更改数十个文件的情况下派生引用其自己的子目录(及其包)的项目?


问题答案:

至于不允许相对导入的原因,您可以从某种角度阅读此讨论:https :
//groups.google.com/forum/#! msg/
golang- nuts/
n9d8RzVnadk/07f9RDlwLsYJ

就我个人而言,我宁愿至少针对内部导入启用它们,完全出于您所描述的原因。

现在,该如何处理呢?

  1. 如果您的fork只是来自另一个项目的一个小修复,可能很快就会被接受为PR-只需手动编辑git remotes,使其引用您自己的git repo,而不是原始的git repo。如果您使用的是Godep之类的供应商解决方案,那么它将顺利运行,因为保存它只会出售您的分叉代码,并且go get永远不会直接使用。

  2. 如果您的前叉有很大的变化,并且您打算保留分支,请重写所有导入路径。您可以sed使用来自动化它,也可以使用gofmt -r它来支持重写正在格式化的代码。

[编辑]我还找到了专门用于解决这种情况的工具:https :
//github.com/rogpeppe/govers

我已经完成了1和2的工作-
当我对某个库进行了一个小错误修正时,我只是更改了遥控器并对其进行了授权。当我实际上分叉一个库而不打算将更改合并回去时,我更改了所有导入路径,并继续仅使用我的存储库。

我还可以想到除供应商工具之外的其他工具,这些工具可以自动执行此操作,但我认为目前尚无任何工具支持它。



 类似资料:
  • 主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字

  • 在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《 Linux文件系统的层次结构》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。 指明一个文件存放的位置,有 2 种方法,分别是使用 绝对路径和 相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根

  • 本文向大家介绍java区分绝对路径和相对路径的方法,包括了java区分绝对路径和相对路径的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java区分绝对路径和相对路径的方法。分享给大家供大家参考。具体分析如下: 这里要区分的是目录路径 如: /opt/deve/tomcat/bin c:\deve\tomcat\bin 都是绝对目录路径 bin bin/data bin\data 都

  • 我有以下问题。当我想在我的Gradle依赖项中使用一个本地jar时。 如果我只是补充一句: 不管用. C:\users\kai\androidStudioProjects\projecta\app\src\main\Java\de\xyz\xxx\projecta\baseActivity.Java:21:错误:包com.pushlink.android不存在导入com.pushlink.andr

  • 问题内容: 我正在编写一个程序,其中的一个组件必须能够采用给定的路径(例如或)和基于该位置的相对路径(例如或或)并产生绝对路径由相对路径暗示。考虑以下目录树。 该文件包含一个链接,如。该计划获得通过或,并将其与结合来获得。 同样,文件具有链接,程序需要从该链接返回。有合理的方法做到这一点吗? 谢谢。:) 编辑: 谢谢斯蒂芬·温伯格!对于未来的每个人,这是我使用的代码。 问题答案: 在与使用时应该做

  • 所以我有一个项目看起来是这样的: 这些都没用。的相对路径确实可以工作,但是公共模块的相对路径是维护的噩梦。 值得注意的是,我刚刚从TS 1.5更新到1.6:使用已经在1.5中工作过。不过,我在1.6音符中找不到任何关于这方面的突破性改变的提及。 >