程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Go语言零到一:包定义和导入(go语言context包)

balukai 2025-07-14 14:49:41 文章精选 3 ℃

引言

在 Go 语言中,包是组织和模块化代码的基本单元。通过将相关的函数、类型和变量组织到包中,可以创建可重用的组件,并避免命名冲突。

1. 包定义

  • 包声明
    • 在文件顶部使用 package 关键字声明包的名称。
    • 示例:
package mypackage
  • 包的作用域
    • 包内的标识符(如函数、类型、变量)默认是私有的,只能在包内部访问。
    • 如果标识符以大写字母开头,那么它是导出的,可以从包外部访问。
  • 包初始化
    • 包可以包含一个或多个 init() 函数,这些函数会在程序启动时按照依赖关系的顺序自动调用。

2. 导入包

  • 导入语句
    • 使用 import 关键字导入其他包。
    • 示例:
import "fmt"
  • 别名
    • 可以为导入的包指定一个别名,以便在代码中使用更短的名字。
    • 示例:
import myfmt "fmt"
  • 导入路径
    • 导入的包路径通常是 GitHub 上的项目路径或者本地文件系统的路径。
    • 示例:
import "github.com/user/repo/pkg"
  • 预定义包
    • Go 标准库包含了许多预定义的包,如 fmt, math, os 等,可以直接导入使用。

3. 使用包

  • 访问包元素
    • 使用 . 操作符访问包中的导出元素。
    • 示例:
fmt.Println("Hello, world!")
  • 从包中导入特定元素
    • 可以使用 import "pkgname" 然后通过 pkgname.element 来访问。
    • 或者使用 import _ "pkgname" 来仅加载包而不导入任何元素。
  • 导入标准库
    • Go 标准库提供了许多有用的包,如 strings, time, net/http 等,可以直接导入使用。

4.牛刀小试

假设我们有两个包,一个是 mypackage,它包含一些实用函数;另一个是 main 包,用于测试 mypackage 的功能。

// mypackage/mypackage.go
package mypackage

import "math"

// 导出的函数
func SquareRoot(x float64) float64 {
    return math.Sqrt(x)
}

// 导出的常量
const Pi = 3.14159

// 导出的类型
type Point struct {
    X, Y float64
}

// 导出的方法
func (p Point) Distance(q Point) float64 {
    return math.Sqrt(math.Pow(p.X-q.X, 2) + math.Pow(p.Y-q.Y, 2))
}

// 包级别的变量
var version = "1.0.0"
// main/main.go
package main

import (
    "fmt"
    "mypackage" // 导入上面定义的包
)

func main() {
    // 使用包中的函数
    result := mypackage.SquareRoot(16)
    fmt.Println("Square root of 16:", result)

    // 使用包中的常量
    fmt.Println("Pi:", mypackage.Pi)

    // 使用包中的类型和方法
    p := mypackage.Point{1, 1}
    q := mypackage.Point{4, 4}
    distance := p.Distance(q)
    fmt.Println("Distance between points:", distance)

    // 使用包级别的变量
    fmt.Println("Package version:", mypackage.version)
}

Tags:

最近发表
标签列表