Go 的 import 语句必须位于 package 声明后、文件顶部,路径须为双引号包裹的完整模块路径(如 "github.com/user/project/utils"),不支持相对路径;多包导入需用括号分组,每行一个包;可使用别名解决冲突或简化长包名,但禁用点导入;循环导入在编译期报错;常见“包找不到”问题多因模块路径不匹配或 GOPROXY 异常。
Go 的 import 语句必须写在文件顶部、package 声明之后,且路径必须是双引号包裹的完整导入路径(不是相对路径或本地文件名)。
Go 不支持像 Python 那样用 ./utils 或 ../model 导入本地包。所有 import 后跟的字符串,都必须是 Go 模块定义的路径(即 go.mod 中 module 声明的根路径 + 子目录)。
github.com/user/proj
ect):"github.com/user/project/utils"
"./utils"、"utils"、"project/utils"
"github.com/user/project/utils",哪怕它和当前文件在同一级目录下Go 强制要求多包导入使用括号语法,不支持 Python 或 JS 那样的逗号分隔单行写法。
import (
"fmt"
"os"
"github.com/user/project/config"
)import "fmt", "os" 或 import "fmt" "os"
当两个包导出同名标识符(比如都含 NewClient),或包名太长/含短横线(如 gopkg.in/yaml.v3),就需要用别名。
import yaml "gopkg.in/yaml.v3" → 后续用 yaml.Unmarshal
import _ "net/http/pprof"
import json2 "encoding/json"(当已导入 "github.com/xxx/json" 且两者都有 Marshal).(点导入)——Go 已明确废弃该语法,编译会报错Go 在编译期就检测 import 循环,一旦出现 a → b → a 或更长链路,立即报错:import cycle not allowed。
types 或 model 包,让双方都导入它,而非互相导入最容易被忽略的一点:import 路径是否匹配 go.mod 中声明的模块路径,以及 GOPROXY 是否能正常解析该路径——很多“包找不到”问题其实不是写错了,而是模块代理返回了 404 或本地缓存损坏,这时候 go clean -modcache 和检查 go env GOPROXY 比改 import 更管用。