Go 包

包是包含各种函数以执行特定任务的容器。例如,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 语句来导入 fmtmath 包。在这种情况下,我们可以使用一个 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 文件所在的位置提供到该包的路径。


常见问题

如何使用 Go 包的名称别名?

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

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
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战