从另一个包和文件 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 中编程,而 import 类 是如此初级。
在 Go 中,您不导入类型或函数,而是导入 packages (see 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()
但只使用这些 "in emergency" 或出现名称冲突(很少见)时。
@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
...
另外,如果你想导出一个结构并在它的包之外初始化这个结构值,那么结构的所有字段都必须以大写字母开头,否则你会得到一个错误"Unexported field 'fieldName' usage"
type Item struct {
Value string // uppercase V
Priority int // uppercase P
Index int // uppercase I
}
感谢@Vasantha Ganesh 的评论
我在尝试从另一个包和文件导入类型时遇到问题。我要导入的结构是下面的结构。
type PriorityQueue []*Item
type Item struct {
value string
priority int
index int
}
如果我将 PriorityQueue 及其所有方法放在同一个文件中,我会用
声明它pq:= &PriorityQueue{}
我像疯子一样在互联网上搜索这个简单问题的答案,但我没有找到答案。我通常在 java 中编程,而 import 类 是如此初级。
在 Go 中,您不导入类型或函数,而是导入 packages (see 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()
但只使用这些 "in emergency" 或出现名称冲突(很少见)时。
@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
...
另外,如果你想导出一个结构并在它的包之外初始化这个结构值,那么结构的所有字段都必须以大写字母开头,否则你会得到一个错误"Unexported field 'fieldName' usage"
type Item struct {
Value string // uppercase V
Priority int // uppercase P
Index int // uppercase I
}
感谢@Vasantha Ganesh 的评论