跳到主要内容

Import

基本导入如何通过包名访问导出标识符?​

  • 普通导入: import "路径" 引入包,当前文件通过该包声明的名字访问导出成员;其他源文件需要各自声明 import;
package main

import "fmt"

func main() {
fmt.Println("hello") // 通过包名访问导出标识符
}

分组导入如何组织多个 import? gofmt 会做什么?​

  • 分组导入: 使用括号组织多个 import;
  • gofmt: 自动排序和整理 import;
import (
"fmt"
"math/rand"
)

别名导入如何使用别名访问包?​

  • 别名: 在导入路径前指定本文件使用的名字,用于解决包名冲突或表达更清楚的用途,不会修改目标包自身的名字;
import random "math/rand"

func main() {
println(random.Intn(10))
}

空导入有什么作用?​

  • 空导入: _ 表示只需要包初始化的副作用,包括依赖初始化、包变量及 init;常见于数据库驱动注册,不能通过该导入访问成员;
// 只触发目标包 init 副作用,不直接使用导出标识符
import _ "database/sql"

点导入有什么作用? 为什么不推荐?​

  • 点导入: 把导出成员直接放入当前文件的可用名字中,读者难以判断来源,也更容易撞名,普通业务代码应避免;
// 将 fmt 的导出标识符放入当前文件作用域;普通业务代码不推荐
import . "fmt"

func main() {
Println("hello")
}

如何根据本文件需要的能力选择导入形式?​

  • 选择方法: 正常使用成员走普通导入,名字冲突走别名导入,只需初始化走空导入;点导入的名称污染风险见本篇对应小节;