您将学习如何创建自己的包并导入自定义包。在此示例中,您将看到如何从另一个包或子包导入结构。您还可以从主包调用自定义包的函数。

以下是我们应用程序的目录结构。

├── family
│   ├── go.mod
│   ├── main.go
│   └── father
│       └── father.go
│       └── son
│           └── son.go

进入family目录并运行以下命令以创建一个名为 family 的go模块。

go mod init family

上面的命令将创建一个名为的文件。

 

要使用自定义包,我们必须先导入它。导入路径是附加在包的子目录和包名称上的模块名称。在我们的示例中,模块名称是 family,包父位于family正下方的父文件夹中。并且,包son位于父文件夹下的子文件夹中。

因此,"family/father"将导入father包,类似"family/father/son"将导入son包

package main

import (
	parent "family/father"
	child "family/father/son"

	"fmt"
)

func main() {
	f := new(parent.Father)
	fmt.Println(f.Data("Mr. Jeremy Maclin"))

	c := new(child.Son)
	fmt.Println(c.Data("Riley Maclin"))
}

我们将father包别名为parent,将son别名为child。在main() 函数中,我们现在可以使用上面的别名。

 

在father文件夹中创建一个文件 。father内的文件应以package father开头,因为它属于father包。

# family\father\father.go
package father

import "fmt"

func init() {
	fmt.Println("Father package initialized")
}

type Father struct {
	Name string
}

func (f Father) Data(name string) string {
	f.Name = "Father : " + name
	return f.Name
}

init 函数可用于执行初始化工作,也可用于在执行开始之前确认程序的正确性。

 

在son文件夹中创建一个文件 。son文件夹中的文件应以package son开头,因为它属于 。

# family\father\son\son.go
package son

import "fmt"

func init() {
	fmt.Println("Son package initialized")
}

type Son struct {
	Name string
}

func (s Son) Data(name string) string {
	s.Name = "Son : " + name
	return s.Name
}

 

family>go run main.go

如果运行该程序,将获得以下输出。

Father package initialized
Son package initialized
Father : Mr. Jeremy Maclin
Son : Riley Maclin