跳到主要内容

Go 包

提示
  1. 包的定义:Go 中的包是包含用于执行特定任务的各种函数的容器,例如 math 包包含 Sqrt() 函数来计算数字的平方根。
  2. 导入和使用包:使用 import 关键字导入包(如 fmt),导入后,我们可以在程序中使用包中的所有函数。例如,fmt.Println() 用于打印输出。
  3. 自定义包:在 Go 中,可以创建自定义包并像预定义包一样使用。首先声明包(如 package calculator),然后在其中定义函数,最后在主文件中导入并使用这些自定义包。

包是包含用于执行特定任务的各种函数的容器。例如,math 包包含 Sqrt() 函数,用于计算数字的平方根。

在处理大型项目时,我们必须处理大量代码,将所有内容写在同一个文件中会使我们的代码看起来凌乱。相反,我们可以通过将相关代码放在包中,将代码分离到多个文件中。

现在,我们可以在项目中需要时使用这些包。这样我们也可以重用我们的代码。

Golang main() 包

记住这个 Hello World 程序,你在开始学习 Go 编程时写过。

package main
import "fmt"

func main() {
fmt.Println("Hello World!")
}

这里,我们用 package main 开始了我们的程序。

每个 Go 程序都从 main 包开始。当编译器看到 main 包时,它会将程序视为可执行代码。

在 Golang 中导入包

在我们之前的示例中,我们使用了代码

import "fmt"

这里,我们使用了 import 关键字导入 fmt 包。

导入包后,我们可以在程序中使用它的所有函数。例如,

package main

// 导入 fmt 包
import "fmt"

func main() {

// 使用 fmt 的 Println() 函数
fmt.Println("Hello World!")
}

在上述程序中,我们导入了 fmt 包到我们的程序中。注意代码

fmt.Println("Hello World!")

这里,我们正在使用 fmt 包的 Println() 函数来打印文本。

常用的 Go 包

既然我们知道了如何导入包,让我们了解一些流行的包:

  • fmt
  • math
  • string

Golang fmt 包

在 Go 中,fmt 包提供了函数来格式化我们的输入/输出数据。例如,fmt.Println() 函数将数据打印到输出屏幕。

一些常用的 fmt 函数:

函数描述
Print()将文本打印到输出屏幕
Println()将文本打印到输出并在末尾添加换行符
Printf()将格式化的字符串打印到输出屏幕
Scan()从用户获取输入值
Scanf()使用格式说明符获取输入值
Scanln()检测到新行时获取输入值

要使用这些函数,我们必须导入 fmt 包。

示例 1:Golang fmt 包

package main
import "fmt"

func main() {

var number int

// 获取输入值
fmt.Scan(&number)

// 使用 Println 打印
fmt.Println("数字是", number)

fmt.Print("使用 Print")
fmt.Println("使用 Println")

}

输出

数字是 10
使用 Print使用 Println

在上面的示例中,我们使用了 fmt.Scan() 函数获取输入值并将其赋给 number 变量。然后我们使用 fmt.Println() 打印 number 的值。

Println() 函数默认在末尾添加换行符。这就是为什么下一个语句 fmt.Print() 在新行中打印文本 使用 Print

然而,Print() 默认不添加换行符,下一个打印语句在同一行中打印文本 使用 Println

示例 2:fmt Scanf() 和 Printf() 函数

package main
import "fmt"

func main() {

var number int

fmt.Scanf("%d", &number) // 输入: 10
fmt.Printf("%d", number) // 输出: 10

}

在上面的示例中,函数

  • fmt.Scanf("%d", &number) - 获取整数输入值并将其赋给 number 变量
  • fmt.Printf("%d", number) - 用 number 的值替换 %d 格式说明符并打印它

Go 中的 math 包

math 包提供了各种函数来执行数学运算。例如,math.Sqrt() 查找数字的平方根。

一些常用的 math 函数:

函数描述
Sqrt()返回数字的平方根
Cbrt()返回数字的立方根
Max()返回两个数字中较大的数字
Min()返回两个数字中较小的数字
Mod()计算除法后的余数

要使用这些函数,我们必须导入 math 包。

示例:math 包

package main
import "fmt"

// 导入 math 包
import "math"

func main() {

// 计算平方根
fmt.Println(math.Sqrt(25)) // 5

// 计算立方根
fmt.Println(math.Cbrt(27)) // 3

// 计算最大数字
fmt.Println(math.Max(21, 18)) // 21

// 计算最小数字
fmt.Println(math.Min(21, 18)) // 18

// 计算余数
fmt.Println(math.Mod(5, 2)) // 1

}

这里,我们在程序中导入了 math 包。这就是为什么我们能够在程序中使用像 Sqrt()Max() 等基于数学的函数。

注意: 在我们的示例中,您可能已经注意到我们使用了两个 import 语句来导入 fmtmath 包。在这种情况下,我们可以使用单个 import 语句一起导入两个包。例如,

// 使用两个 import 语句
import "fmt"
import "math"

// 使用单个 import 语句
import (
"fmt"
"math"
)

Go 字符串包

strings 包提供了对 UTF-8 编码字符串执行操作的函数。例如,strings.Contains() 检查字符串中是否包含子字符串。

一些常用的 strings 函数:

函数描述
Compare()检查两个字符串是否相等
Contains()检查字符串中是否包含子字符串
Count()计算字符串中子字符串出现的次数
Join()通过连接字符串数组的元素创建新字符串
ToLower()将字符串转换为小写
ToUpper()将字符串转换为大写

要使用这些函数,我们必须导入 strings 包。

示例:string 包

package main

// 导入多个包
import (
"fmt"
"strings"
)

func main() {

// 将字符串转换为小写
lower := strings.ToLower("GOLANG STRINGS")
fmt.Println(lower)

// 将字符串转换为大写
upper := strings.ToUpper("golang strings")
fmt.Println(upper)

// 创建字符串数组
stringArray := []string{"I love", "Go Programming"}

// 用空格连接数组元素
joinedString := strings.Join(stringArray, " ");
fmt.Println(joinedString)

}

输出

golang strings
GOLANG STRINGS
I love Go Programming

在上述示例中,我们使用了 strings 包的函数对字符串执行了各种操作。

Go 自定义包

到目前为止,我们一直在使用 Go 库中已经定义的包。然而,Go 编程允许我们创建自己的自定义包,并像预定义的包一样使用它们。

1. 创建自定义包

要创建自定义包,我们首先需要创建一个新文件并声明包。例如,

// 声明包
package calculator

现在,我们可以在文件中创建函数。例如,

package calculator

// 创建 add 函数
func Add(n1, n2 int) int {
return n1 + n2
}

// 创建 subtract 函数
func Subtract(n1, n2 int) int {
return n1 - n2
}

在上述示例中,我们创建了一个名为 calculator 的自定义包。在包内,我们定义了两个函数:Add()Subtract()

注意: 此文件不包含主包。因此,Go 编译器不会将其视为可执行程序,它的创建仅用于共享和重用。

2. 导入自定义包

现在,我们可以在主文件中导入自定义包。

package main

// 导入自定义包 calculator
import (
"fmt"
"Packages/calculator"
)

func main() {

number1 := 9
number2 := 5

// 使用 calculator 包的 add 函数
fmt.Println(calculator.Add(number1, number2))

// 使用 calculator 包的 subtract 函数
fmt.Println(calculator.Subtract(number1, number2))

}

这里,我们已经成功地在我们的程序中导入了 calculator 包,并使用了其函数。

注意: 我们使用 Packages/calculator 作为包的名称。这是因为 calculator 包位于 Packages 文件夹内,我们提供了从 main 文件位置到该包的路径。

常见问题

如何在 Go 包中使用名称别名?

有时包名可能过长而难以使用。在这种情况下,我们可以使用别名,并为包使用不同的名称。例如,

import str "strings"

这里,我们使用 str 作为 strings 包的别名。现在,我们可以在 strings 函数中使用 str。让我们看一个示例。

package main

import (
"fmt"
str "strings"
)

func main() {

fmt.Println(str.ToUpper("mashangxue123")) // PROGRAMIZ
fmt.Println(str.ToLower("PROGRAMIZ")) // mashangxue123

}

这里,我们可以使用别名 str 来使用 ToUpper()ToLower() 函数。

如果我们导入了一个包但没有在程序中使用它会怎样?

有时我们可能事先导入了包,但在整个程序中从未使用它们。例如,

package main

import (
"fmt"
"math"
)

func main() {

// 抛出错误
fmt.Println("Programiz Go 包")

}

当我们运行这段代码时,我们会得到 "导入的包未使用" 的错误信息。这是因为在这里,我们导入了 math 包但从未使用过它。

要解决这个问题,我们可以使用空白标识符 _。空白标识符告诉编译器如果包未使用则忽略错误。例如,

package main

import (
"fmt"
_ "math"
)

func main() {

// 没有任何错误地运行
fmt.Println("Programiz Go 包")

}

输出

Programiz Go 包