包导入 #
一、导入语法 #
1.1 单行导入 #
go
import "fmt"
import "os"
1.2 批量导入 #
go
import (
"fmt"
"os"
"net/http"
)
二、导入方式 #
2.1 标准导入 #
go
import "fmt"
func main() {
fmt.Println("Hello")
}
2.2 别名导入 #
go
import f "fmt"
func main() {
f.Println("Hello")
}
使用场景:
- 包名冲突
- 简化长包名
go
import (
"github.com/gin-gonic/gin"
g "github.com/gin-gonic/gin" // 别名
)
func main() {
r := g.Default()
}
2.3 匿名导入 #
go
import _ "github.com/lib/pq"
只执行包的init函数,不使用包的其他功能。
常见用途:
- 数据库驱动注册
- 插件加载
go
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, _ := sql.Open("mysql", "dsn")
}
2.4 点导入 #
go
import . "fmt"
func main() {
Println("Hello") // 不需要包名前缀
}
使用场景:
- 测试文件
- DSL领域特定语言
go
import . "github.com/onsi/gomega"
func TestSomething(t *testing.T) {
Expect(1).To(Equal(1))
}
三、导入路径 #
3.1 标准库 #
go
import (
"fmt"
"os"
"net/http"
"encoding/json"
)
3.2 第三方包 #
go
import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
3.3 内部包 #
go
import (
"myapp/internal/database"
"myapp/internal/service"
)
3.4 相对路径(不推荐) #
go
import "./utils" // 不推荐
四、远程包导入 #
4.1 自动下载 #
go
import "github.com/gin-gonic/gin"
bash
go mod tidy # 自动下载
4.2 指定版本 #
go
import "github.com/gin-gonic/gin"
bash
go get github.com/gin-gonic/gin@v1.9.1
4.3 私有仓库 #
bash
go env -w GOPRIVATE=github.com/mycompany/*
五、导入组织 #
5.1 分组导入 #
go
import (
// 标准库
"fmt"
"os"
// 第三方库
"github.com/gin-gonic/gin"
"gorm.io/gorm"
// 内部包
"myapp/internal/database"
"myapp/pkg/utils"
)
5.2 导入顺序 #
- 标准库
- 第三方库
- 内部包
5.3 工具格式化 #
bash
goimports -w main.go
六、常见问题 #
6.1 未使用的导入 #
go
import "fmt" // 错误:imported and not used
6.2 循环导入 #
go
// package a
import "myapp/b"
// package b
import "myapp/a" // 循环导入
解决方案:
- 提取公共接口
- 使用依赖注入
6.3 包名冲突 #
go
import (
"path" // 标准库path
"github.com/user/path" // 冲突
)
// 解决:使用别名
import (
"path"
mypath "github.com/user/path"
)
七、实际应用 #
7.1 Web应用 #
go
import (
"net/http"
"github.com/gin-gonic/gin"
"myapp/internal/handler"
"myapp/internal/middleware"
)
func main() {
r := gin.Default()
r.Use(middleware.Logger())
r.GET("/", handler.Home)
r.Run(":8080")
}
7.2 数据库应用 #
go
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"gorm.io/gorm"
"myapp/internal/model"
)
func main() {
db, _ := gorm.Open(mysql.Open("dsn"), &gorm.Config{})
db.AutoMigrate(&model.User{})
}
7.3 CLI应用 #
go
import (
"os"
"github.com/spf13/cobra"
"myapp/cmd"
)
func main() {
rootCmd := &cobra.Command{Use: "myapp"}
rootCmd.AddCommand(cmd.NewVersionCmd())
rootCmd.Execute()
}
八、最佳实践 #
8.1 使用goimports #
bash
go install golang.org/x/tools/cmd/goimports@latest
8.2 分组导入 #
go
import (
// 标准库
"fmt"
// 第三方
"github.com/gin-gonic/gin"
// 内部
"myapp/internal"
)
8.3 避免点导入 #
go
// 避免
import . "fmt"
// 推荐
import "fmt"
九、总结 #
包导入要点:
| 方式 | 语法 | 说明 |
|---|---|---|
| 标准 | import “pkg” | 正常导入 |
| 别名 | import x “pkg” | 重命名 |
| 匿名 | import _ “pkg” | 只执行init |
| 点 | import . “pkg” | 省略包名 |
关键点:
- 导入路径:标准库、第三方、内部包
- 导入方式:标准、别名、匿名、点导入
- 导入组织:分组、排序
- 工具支持:goimports
- 避免循环:合理设计包结构
准备好学习常用标准库了吗?让我们进入下一章!
最后更新:2026-03-26