繁体   English   中英

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

[英]Import struct from another package and file golang

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

type PriorityQueue []*Item

type Item struct {
   value string
   priority int   
   index int 
}

如果我将 PriorityQueue 和它的所有方法放在同一个文件中,我会用

pq:= &PriorityQueue{}

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

在 Go 中,您不导入类型或函数,而是导入(请参阅规范:导入声明)。

示例导入声明:

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()

但只能在“紧急情况”或出现名称冲突(很少见)时使用这些。

@icza 上面所说的加上:

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

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

...

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

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

感谢@Vasantha Ganesh 评论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM