Go 包
- 包的定义:Go 中的包是包含用于执行特定任务的各种函数的容器,例如
math
包包含Sqrt()
函数来计算数字的平方根。 - 导入和使用包:使用
import
关键字导入包(如fmt
),导入后,我们可以在程序中使用包中的所有函数。例如,fmt.Println()
用于打印输出。 - 自定义包:在 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
语句来导入 fmt
和 math
包。在这种情况下,我们可以使用单个 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 包