2.5. 导入声明

导入声明以关键字 import 开始,一般语法如下:

import 导入模块路径

比如下面的例子:

// 版权 @2023 凹语言 作者。保留所有权利。

import "errors"

func main {
    err := errors.New("!!!")
    println("err:", err.Error())
}

func getAnswer => i32 {
    return 42
}

程序开始处的 import "errors" 声明导入了凹的内置 errors 模块,后续的函数中即可使用该模块的公开对象——如例子中的 errors.New 函数;. 在这里被称为选择操作符,它的含义是从左侧的对象(模块)中选择名称与右侧相同的那个对象来使用,该操作符除了用于选择模块公开的函数、全局变量等对象,还用于选择结构体的成员(详见第6章)。

导入声明应位于源文件内的所有非导入声明之前(既位于头部,紧随文件头注释之后)。若导入多个模块,可以使用括号成组导入,形如:

import (
    "errors"
    "strconv"
)

该声明与下述声明是等价的:

import "errors"
import "strconv"

在导入模块时,可以给模块起别名,一般语法如下:

import 导入模块路径 => 模块别名

这种用法可以解决同时导入两个路径不同,但名字相同的模块时名字冲突的问题,例如:

import (
    "errors"
    "mypackage/errors" => myerrors
)

func main {
    err := errors.New("!!!")     // 调用内置 errors 模块
    myerr := myerrors.New("!!!") // 调用 mypackage/errors 模块
}

与其他声明不同,导入声明的作用范围是当前源文件,如果一个模块内的两个源文件使用了同一个第三方模块,那么两个文件内都需要其导入声明。

在凹语言中,每个源文件导入的其他模块都必须被使用,也就是说,如果导入了一个模块,但并未使用其任何对象,将被视为语法错误。