go-包
- Go 的 包(package) 可以理解成:用来组织代码、隔离命名空间、实现代码复用的一种机制
- 每个 Go 文件都必须声明
package xxx - 同一个目录下的 Go 文件通常属于同一个 package
- 调用其他包内容:
包名.xxx - 大写开头可以跨 package 使用,小写只能包内部使用
- 包路径 =
go.mod的module+ 目录路径
导入包
- Go 使用
import导入包 - Go 里导入多个包,推荐使用括号
// 推荐写法,通过括号导入多个包
import (
"fmt"
"strings"
"time"
)
// 分开写导入包
import "fmt"
import "strings"
第三方包
- 只需在代码中导入 Gin,Go 会在构建时自动获取它
- 也可以通过
go mod tidy来检查依赖获取
import "github.com/gin-gonic/gin"
导入其他目录包
- 导入路径:模块路径 + 包目录相对路径
- 跨包访问其他包,大写开头才可以访问
- 首字母的大写的函数或者变量可以给其他包调用
import "ai-go-demo/internal/service"
import 的几种特殊写法
- 普通导入
- 别名导入
_空白导入、表示不使用包里面的函数- 导入这个包,但是不直接使用它的函数或变量,只执行包的初始化逻辑
// 普通导入
import "fmt"
fmt.Println()
// 别名导入
import f "fmt"
f.Println()
// 空白导入
import _ "github.com/go-sql-driver/mysql"
package main
- 表示这个 package 是一个可执行程序入口包
- 用于Go 程序的入口函数
包规则
- 每个
.go文件必须声明 package - 同一个目录下,通常属于同一个 package
- Go 的包基本是以目录为单位组织的。
- 如下这3个文件,都需要声明package user
user/
├── user.go
├── service.go
└── repository.go
- 跨包访问时,大写开头才可以访问
- 首字母的大写的函数或者变量可以给其他包调用
- 首字母小写的,只能在内部包访问
package user
var Name = "Tom"
var age = 18
func GetUser() {}
func getUser() {}
- 在其他包里
package main
import "myapp/user"
func main() {
println(user.Name) // ✅ 可以
println(user.age) // ❌ 不可以
user.GetUser() // ✅ 可以
user.getUser() // ❌ 不可以
}