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

如何使用“内部”包?

宋朝
2023-03-14
问题内容

我尝试了解如何使用“内部”包组织代码。让我展示一下我的结构:

project/
  internal/
    foo/
      foo.go # package foo
    bar/
      bar.go # package bar
  main.go

# here is the code from main.go
package main

import (
  "project/internal/foo"
  "project/internal/bar"
)

project/在GOPATH树之外。无论我尝试从main.go什么都不导入的任何路径都可行,唯一可行的情况是import "./internal/foo|bar"。我认为我做错了什么,或者总体上弄错了“内部”包装想法。任何人都可以让事情变得更清楚吗?

更新

上面的示例是正确的,我唯一需要的是将project/文件夹放在下$GOPATH/src。因此,project/internal/foo|bar如果我们仅从project/子树而不是从外部导入,则该导入路径是可行的。


问题答案:

包必须位于您的包$GOPATH中才能导入。您提供的示例可以执行,import "./internal/foo|bar"因为它可以进行本地导入。internal只是这样做使得不与您的internal目录共享通用根目录的代码无法导入包internal

如果将所有这些内容放入gopath中,则尝试从另一个位置(例如OuterFolder/project2/main.go,其中OuterFolder包含两个位置)进行导入projectproject2然后import "../../project/internal/foo"将失败。import "foo"由于不满足此条件,它也会以您尝试过的方式或其他任何方式失败;

如果导入代码位于以“内部”目录的父级为根的树之外,则不允许导入包含“内部”元素的路径。

现在,如果你有路径$GOPATH/src/project,那么你可以做的import "foo",并import "bar"从内部$GOPATH/src/project/main.go和进口会成功。project但是,下面未包含的内容将无法导入foo或导入bar



 类似资料:
  • 我在看H.J.Lu的补丁:更新x86 rdrand intrinsics。我不知道我是否应该使用rdrand\u64、rdrand64\u步骤,或者是否有其他功能。似乎没有为他们编写测试用例。 似乎也缺乏手册页(来自Ubuntu 14,GCC 4.8.4): 如何使用RDRAND内部函数来生成一个32字节的块? 一个相关的问题是RDRAND和RDSEED内部函数GCC和Intel C。但它没有告诉

  • 问题内容: 我一直在寻找是否有某种方法可以使用中的类,但我还没有找到任何文档或有关此主题的指南。 假设我创建了一个简单的类,其中使用的一些库,例如: 有没有可能在此类中使用此类? 太难了吗? 我必须创建一个文件吗? 有没有指导说明如何做到这一点? 顺便说一句,我也看了一下代码,感到有点迷茫,我无法出于自己的目的复制它们的功能。 问题答案: 是的,尽管不是很琐碎,但它是可能的。通常,您需要一个Jav

  • 问题内容: 我试图更深入地了解Python的工作方式,并且一直在查看http://docs.python.org/3.3/reference/grammar.html上显示的语法。 我注意到它说您也必须更改parsermodule.c,但说实话,我只是不关注这里发生的事情。 我了解语法是如何阅读该语言的规范,但是…我什至不知道该写的是什么。它看起来几乎像Python,但实际上不是。 我希望更好地了

  • 问题内容: Java中匿名类的用途是什么?我们可以说使用匿名类是Java的优势之一吗? 问题答案: 使用某些“额外”(例如覆盖方法)创建对象的实例时,匿名内部类会变得很有用,而不必实际继承一个类。 我倾向于将它用作附加事件侦听器的快捷方式: 使用此方法可以使编码更快一些,因为我不需要创建额外的类来实现我可以实例化一个匿名内部类而无需实际创建单独的类。 我仅将这种技术用于“快速而肮脏的”任务,在这些

  • 问题内容: 我有一个用go语言编写的网络服务器,并且正在提供来自不同来源(本地,其他服务器,S3)的一些音频文件。我想为此文件提供部分内容,以便HTML音频标签能够搜索和循环。 我该如何实现?我知道包功能可以做到这一点,但是我如何通过自己提供文件来实现呢?我需要在没有此操作的情况下执行此操作,以便可以使用相同的处理程序处理来自不同来源的文件。 问题答案: 提供部分内容并非易事。有关介绍,请参见Wi

  • 问题内容: 我面临以下问题:我创建了一个Jenkins Docker容器,并将主机上的Docker套接字与该容器链接。像这样: 然后,当我尝试在詹金斯上创建一些作业时,我收到通常的“权限被拒绝”消息: 尝试在unix:///var/run/docker.sock上连接到Docker守护程序套接字时获得的权限被拒绝:获取 http://%2Fvar%2Frun%2Fdocker.sock/v1.29