从另一个包和文件 golang 导入结构

Posted

技术标签:

【中文标题】从另一个包和文件 golang 导入结构【英文标题】:Import struct from another package and file golang 【发布时间】:2015-07-06 01:30:48 【问题描述】:

我在尝试从另一个包和文件导入类型时遇到问题。我要导入的结构是下面的结构。

type PriorityQueue []*Item

type Item struct 
   value string
   priority int   
   index int 

如果我将 PriorityQueue 及其所有方法放在同一个文件中,我会声明它

pq:= &PriorityQueue

我一直像疯子一样在互联网上搜索这个简单问题的答案,但我没有找到答案。我通常用java编程,导入类是如此的初级。

【问题讨论】:

为什么不直接将结构复制到您的包中? 还是导入包? 合格。 pq := &mypkg.PriorityQueue. how do I use my import package's struct as a type in go 的可能重复项 我遇到了同样的问题,解决方法是不仅对结构名称使用大写字母,而且对结构内部的变量也使用大写字母来导出它们。 【参考方案1】:

在 Go 中,您不导入类型或函数,而是导入 packages(参见 Spec: Import declarations)。

导入声明示例:

import "container/list"

通过导入一个包,您可以访问它的所有导出标识符,您可以将它们称为packagename.Identifiername,例如:

var mylist *list.List = list.New()

// Or simply:
l := list.New()

在导入声明中有一些技巧,例如这样做:

import m "container/list"

您可以使用"m.Identifiername" 引用导出的标识符,例如

l := m.New()

也可以这样做:

import . "container/list"

你可以完全省略包名:

l := New()

但仅在“紧急情况”或存在名称冲突(很少见)时使用。

【讨论】:

我也犯了一个错误,我在 GOPATH 之外创建了一个新项目。本地导入失败可能是这已经完成的第一个迹象。 使用import . 完全省略包名真是太棒了!【参考方案2】:

@icza 上面所说的加上:

在 Go 1.9 中,有类型别名允许您从包中导入类型并将它们别名为类似于 local 类型:

package.go 内容:

type A struct 
    X, Y int

main.go内容:

...

import myTypes "path/to/package"

// Note the equal sign (not empty space)
// It does NOT create a new "subclass"
// It's an actual alias that is local.
// Allows you to avoid whole-sale `import . "path/to/package"` which imports all objects from there into local scope.
type A = myTypes.A

...

【讨论】:

如何从 myTypes 访问“X”?因为,在类似的情况下,myTypes.A.X 似乎不起作用。 要访问 struct 中的变量,只需执行 myTypes.X 并确保 X 是全局变量(首字母大写)【参考方案3】:

另外,如果你想导出一个结构并在它的包之外初始化这个结构值,结构的所有字段都必须以大写字母开头,否则你会得到一个错误"Unexported field 'fieldName' usage"

type Item struct 
   Value string  // uppercase V
   Priority int  // uppercase P
   Index int     // uppercase I

感谢@Vasantha Ganesh 的评论

【讨论】:

这就是我所缺少的,谢谢!

以上是关于从另一个包和文件 golang 导入结构的主要内容,如果未能解决你的问题,请参考以下文章

问题在圈河Golang导入包

Ubuntu18涓嬩娇鐢╯upervisor瀹堟姢golang杩涚▼

Golang 入门 : 切片(slice)

Golang 入门 : 切片(slice)

如何从另一个目录导入 .py 文件? [复制]

Golan访问关系数据库