包是包含各种函数以执行特定任务的容器。例如,math
包包含 Sqrt()
函数以执行数字的平方根计算。
在处理大型项目时,我们需要处理大量的代码,将所有代码写在同一个文件中会使我们的代码显得混乱。相反,我们可以将代码分成多个文件,将相关代码放在包中。
现在,我们可以在项目需要时使用该包。这样我们也可以重用我们的代码。
Golang main() 包
还记得你在开始 Go 编程时编写的 Hello World
程序吗。
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
这里,我们以 package main
开始我们的程序。
每个 Go 程序都以 main 包开始。每当编译器看到 main 包时,它都会将该程序视为可执行代码。
在 Golang 中导入包
在我们之前的例子中,我们使用了代码
import "fmt"
这里,我们使用了 import
关键字导入 fmt
包。
一旦我们导入了包,我们就可以在程序中使用它的所有函数。例如,
package main
// import the fmt package
import "fmt"
func main() {
// use the Println() function of fmt
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
// take input value
fmt.Scan(&number)
// print using Println
fmt.Println("Number is", number)
fmt.Print("Using Print")
fmt.Println("Using Println")
}
输出
Number is 10 Using PrintUsing Println
在上面的示例中,我们使用 fmt.Scan()
函数获取输入值并将其赋给 number 变量。然后我们使用 fmt.Println()
打印 number 的值。
Println()
函数默认会在末尾添加一个换行符。这就是为什么下一条语句 fmt.Print()
会在新行中打印文本 Using Print
。
但是,Print()
默认不添加换行符,下一条打印语句会在同一行打印文本 Using Println
。
示例 2:fmt Scanf() 和 Printf() 函数
package main
import "fmt"
func main() {
var number int
fmt.Scanf("%d", &number) // Input: 10
fmt.Printf("%d", number) // Output: 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"
// import the math package
import "math"
func main() {
// find the square root
fmt.Println(math.Sqrt(25)) // 5
// find the cube root
fmt.Println(math.Cbrt(27)) // 3
// find the maximum number
fmt.Println(math.Max(21, 18)) // 21
// find the minimum number
fmt.Println(math.Min(21, 18)) // 18
// find the remainder
fmt.Println(math.Mod(5, 2)) // 1
}
这里,我们已经在程序中导入了 math
包。这就是为什么我们能够使用 Sqrt()
、Max()
等数学函数。
注意:在我们的示例中,您可能已经注意到我们使用了两个 import
语句来导入 fmt
和 math
包。在这种情况下,我们可以使用一个 import
语句将两个包一起导入。例如,
// use two import statements
import "fmt"
import "math"
// use single import statement
import (
"fmt"
"math"
)
Go strings 包
strings
包提供了对 UTF-8 编码字符串执行操作的函数。例如,strings.Contains()
检查字符串是否包含子字符串。
一些常用的 strings
函数
函数 | 描述 |
---|---|
Compare() |
检查两个字符串是否相等 |
Contains() |
检查字符串是否包含子字符串 |
Count() |
计算字符串中子字符串出现的次数 |
Join() |
通过连接字符串数组的元素来创建新字符串 |
ToLower() |
将字符串转换为小写 |
ToUpper() |
将字符串转换为大写 |
要使用这些函数,我们必须导入 strings
包。
示例:string 包
package main
// import multiple packages
import (
"fmt"
"strings"
)
func main() {
// convert the string to lowercase
lower := strings.ToLower("GOLANG STRINGS")
fmt.Println(lower)
// convert the string to uppercase
upper := strings.ToUpper("golang strings")
fmt.Println(upper)
// create a string array
stringArray := []string{"I love", "Go Programming"}
// join elements of array with space in between
joinedString := strings.Join(stringArray, " ");
fmt.Println(joinedString)
}
输出
golang strings GOLANG STRINGS I love Go Programming
在上面的示例中,我们使用了 strings
包的函数来对字符串执行各种操作。
Go 自定义包
到目前为止,我们一直在使用 Go 库中已定义的包。但是,Go 编程允许我们创建自己的自定义包,并像预定义包一样使用它们。
1. 创建自定义包
要创建自定义包,我们首先需要创建一个新文件并声明该包。例如,
// declare package
package calculator
现在,我们可以在文件中创建函数。例如,
package calculator
// create add function
func Add(n1, n2 int) int {
return n1 + n2
}
// create subtract function
func Subtract(n1, n2 int) int {
return n1 - n2
}
在上面的示例中,我们创建了一个名为 calculator
的自定义包。在包中,我们定义了两个函数:Add()
和 Subtract()
。
注意:此文件不包含 main 包。因此,Go 编译器不将其视为可执行程序,它仅用于共享和重用。
2. 导入自定义包
现在,我们可以在主文件中导入自定义包。
package main
// import the custom package calculator
import (
"fmt"
"Packages/calculator"
)
func main() {
number1 := 9
number2 := 5
// use the add function of calculator package
fmt.Println(calculator.Add(number1, number2))
// use the subtract function of calculator package
fmt.Println(calculator.Subtract(number1, number2))
}
在这里,我们已成功在程序中导入了 calculator 包并使用了它的函数。
注意:我们将 Packages/calculator
用作包名。这是因为 calculator 包位于 Packages
文件夹内,并且我们从 main
文件所在的位置提供到该包的路径。
常见问题
有时包名可能很长,不方便使用。在这种情况下,我们可以使用别名并为包使用不同的名称。例如,
import str "strings"
在这里,我们为 strings 包使用了别名 str
。现在,我们可以使用 str 来调用 strings 函数。让我们看一个例子。
package main
import (
"fmt"
str "strings"
)
func main() {
fmt.Println(str.ToUpper("programiz")) // PROGRAMIZ
fmt.Println(str.ToLower("PROGRAMIZ")) // programiz
}
在这里,我们可以使用别名 str
来使用 ToUpper()
和 ToLower()
函数。
有时我们可能会提前导入包,但整个程序中都未使用它们。例如,
package main
import (
"fmt"
"math"
)
func main() {
// throws an error
fmt.Println("Programiz Go Package")
}
当我们运行此代码时,我们会收到错误消息 "package imported but not used"
。这是因为在这里,我们导入了 math
包但从未将其使用过。
要解决此问题,我们可以使用空白标识符 _
。空白标识符告诉编译器,如果未使用该包,则忽略该错误。例如,
package main
import (
"fmt"
_ "math"
)
func main() {
// runs without any error
fmt.Println("Programiz Go Package")
}
输出
Programiz Go Package