Go 使用未从包导出的类型
以下是示例库包:Go 使用未从包导出的类型,go,Go,以下是示例库包: package library type ExportedType interface { GetSomeField1() string } func Init(field1, field2 string) *notExportedType { return ¬ExportedType{ SomeField1: field1, someField2: field2, } } type notExport
package library
type ExportedType interface {
GetSomeField1() string
}
func Init(field1, field2 string) *notExportedType {
return ¬ExportedType{
SomeField1: field1,
someField2: field2,
}
}
type notExportedType struct {
SomeField1 string
someField2 string
}
func (t *notExportedType) GetSomeField1() string {
return t.SomeField1
}
func (t *notExportedType) GetSomeField2() string {
return t.someField2
}
下面是我如何使用它:
package main
import (
"fmt"
"./library"
)
func main() {
var record1 library.ExportedType = library.Init("record1 field1", "record1 field2")
fmt.Println(record1.GetSomeField1())
// fmt.Println(record1.GetSomeField2()) <- undefined (type library.ExportedType has no field or method GetSomeField2)
// fmt.Println(record1.SomeField1) <- undefined (type library.ExportedType has no field or method SomeField1)
// _ = record1.(*library.notExportedType) <- cannot refer to unexported name library.notExportedType
record2 := library.Init("record2 field1", "record2 field2")
fmt.Println(record2.GetSomeField1())
fmt.Println(record2.GetSomeField2())
fmt.Println(record2.SomeField1)
// fmt.Println(record2.someField2) <- undefined (cannot refer to unexported field or method someField2)
}
主程序包
进口(
“fmt”
“/图书馆”
)
func main(){
var record1 library.ExportedType=library.Init(“记录1字段1”、“记录1字段2”)
fmt.Println(record1.GetSomeField1())
//fmt.Println(record1.GetSomeField2())notExportedType
不是未报告的类型,而是未报告的名称。因此,您不能在包外声明该类型的新实例。如果您有此notExportedType
类型的实例,您仍然可以访问该类型的导出成员字段和方法。这是标准和指定的行为。Exporting仅适用于名称