开放的编程资料库

当前位置:我爱分享网 > Go教程 > 正文

如何在Golang中使用包

Go包教程展示了如何在Golang中使用包。

$ go version
go version go1.18.1 linux/amd64

我们使用Go版本1.18。

是声明常量、类型、变量和属于包的函数的文件集合。

一个包的所有源文件都位于一个目录中。每个源文件都以一个包子句开始,该子句定义了它所属的包。属于一个包的常量、类型、变量和函数在该包的所有文件中都是可访问的。包的元素可以在需要时导出到其他包。

包的所有源文件都存储在一个目录中。目录和包的名称不必匹配,但通常的做法是两者共享相同的名称。

为了在另一个包中使用一个包的元素,必须导出这些元素。在Go中,导出是通过将元素名称大写来执行的。

包有以下用途:

  • 组织代码以供重用
  • 防止名称冲突
  • 通过允许重新编译较小的程序块来加快编译速度

包被进一步组织成模块。模块是存储在文件树中的Gopackage的集合,其根部有一个go.mod文件。模块路径是用于导入该模块所有包的前缀路径。

进入主包

main告诉Go编译器该包应该编译为可执行程序而不是共享库。main包中的main函数是程序的入口。

package main

import "fmt"

func main() {

    fmt.Println("Hello there!")
}

程序定义了一个main包,并从fmt包中导入了一个函数。

package main

我们声明main包。包是用package关键字声明的。

import "fmt"

我们导入fmt包;它实现了格式化的输入/输出。

fmt.Println("Hello there!")

我们现在可以使用fmt包的Println函数了。

所有文件、变量和类型都可以在同一包内的所有文件中访问。以下两个文件共享同一个包。

$ go mod init com.zetcode/main

创建了一个模块。

package main

import "fmt"

const c1 = 1.2
const c2 = 1.4

func f1() {

     fmt.Println("f1")
}

func f2() {

     fmt.Println("f2")
     fmt.Println(c1)
     fmt.Println(c2)
}

我们有包含两个常量和两个函数的helpers.go文件。

package main

import "fmt"

func main() {

     f1()
     f2()

     fmt.Println("-----------------")

     fmt.Println(c1)
     fmt.Println(c1)
}

我们可以直接调用这两个函数并打印这两个常量,而无需导入它们。

$ go run .
f1
f2
1.2
1.4
-----------------
1.2
1.2

去自定义包

在下面的示例中,我们创建了一个自定义包。

$ mod init com.zetcode/custom

首先,我们创建一个模块。

$ tree
├── go.mod
├── helpers
│   └── helpers.go
└── main.go

这些是项目目录的内容。

package helpers

import "fmt"

const c1 = 1.2
const c2 = 1.4

func F1() {

     fmt.Println("f1")
}

func F2() {

     fmt.Println("f2")
     fmt.Println(c1)
     fmt.Println(c2)
}

为了将一个包中的元素暴露给另一个包,我们必须导出它们。在Go中,导出是在元素名称以大写字母开头时完成的。在我们的例子中,函数F1F2被导出。

package main

import (
     "com.zetcode/custom/helpers"
)

func main() {

     helpers.F1()
     helpers.F2()
}

我们调用这两个函数。

import (
     "com.zetcode/custom/helpers"
)

请注意,我们在包名称前加上模块路径。

Go包别名

为了防止名称冲突或为了方便起见,可以给包起别名。

package main

import (
     "fmt"
     str "strings"
)

func main() {

     langs := []string{"F#", "Go", "Python", "Perl", "Erlang"}

     s := str.Join(langs, ", ")
     fmt.Println(s)

     data := str.Split(s, ",")
     fmt.Println(data)
}

在代码示例中,我们使用了strings包并为其指定了一个别名。

import (
     "fmt"
     str "strings"
)

我们给strings包一个新的别名,叫做str

s := str.Join(langs, ", ")

我们通过别名引用Join函数。

去第三方包

Go拥有庞大的第三方库生态系统,这些库以包的形式分发。

为了包含一个包,我们导入它,Go在我们构建或运行项目时自动下载它。或者我们可以使用goget命令手动下载。

$ go mod init com.zetcode/thirdparty
$ go get github.com/bykof/gostradamus

我们启动一个模块并下载用于处理日期和时间的gostradamus包。

package main

import (
    "fmt"

    "github.com/bykof/gostradamus"
)

func main() {

    now := gostradamus.Now()

    fmt.Println(now)
}

该示例打印当前时间。

在本教程中,我们讨论了Go中的包。

列出所有Go教程。

未经允许不得转载:我爱分享网 » 如何在Golang中使用包

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏