Skip to content
GitHub

Go Module

使用 import 关键字引入官方库, 自定义包或第三方库


import "fmt"
import "strings"

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println("fmt package")
    strings.Replace("fmt package", "fmt", "strings", 1)
}
  • 未被使用模块会报未引入错误: imported and not used: "strings"
  • 可以使用 _ 符号避免未使用模块报错
  • 使用 . 符号, 使用模块方法时可以不用带模块名称
  • 使用 <name>,给模块添加别名
  • 可被外都调用包方法开头字母都是大写
import (
    . "fmt"                                      // 使用模块时, 可以省略模块名称
    str "strings"                                // 定义模块别名
    _ "os"                                       // 只声明而不导入模块
)

func main() {
    Println("fmt package")                       // 省略模块名称 "fmt"
    str.Replace("fmt package", "fmt", "strings", 1)
}
 $ go get -u <module>

 $ ls -l
 > -rw-r--r-- 1 root root  2031 Jul 26 23:32 go.mod
 > -rw-r--r-- 1 root root 16603 Jul 26 23:32 go.sum
 > -rw-r--r-- 1 root root   935 Jul 26 23:21 main.go

第三方库下载到本地后, 引入方式与标准库一致

import {
    "fmt"                                        // 标准库在前
    "strings"

    "github.com/gin-gonic/gin"                   // 第三方库在后
    "github.com/swaggo/files"
}

使用 go mod 创建项目, 创建多级目录存放自定义模块

demo                                             # 创建 demo 文件夹, 存放项目
├── go.mod                                       # module learn  使用 go mod 在 demo 文件下创建 learn 项目
├── main.go                                      # package main  learn 项目的入口
└── lib
    ├── config                                   # 创建 config 文件夹存放 config 模块, 文件夹最好与模块同名, 以便于查找
    |   ├── remote.go                            # remote.go 属于 config 模块, 是 config 模块进一步划分
    |   └── local.go                             # local.go 属于 config 模块, 是 config 模块进一步划分
    └── summary                                  # 创建 summary 文件夹存放 log 模块, 反面示例. 模块与文件夹不同名
        └── logger.go                            # logger.go 属于 log 模块
import (
    "demo/lib/config"                            // 引入 config 模块
    "demo/lib/summary"                           // 引入 summary 路径下模块
)
  • 单个文件夹只允许存放一个包, 包内可以继续划分为多个文件
  • 引入包时, 只需要引入包的目录即可, 无需指定文件
  • 包名可以与模块名称不一致, 但是在引入后难以通过引入语句路径查找模块位置

local.go 添加代码

package config

import "fmt"

func Head() {
    fmt.Println("func Head config module")
}

func head() {
    fmt.Println("func head config module")
}

logger.go 添加代码

package log

import "fmt"

func Display() {
    fmt.Println("func Display log module")
}

main.go 引入 configlog 模块的方法

import {
    "fmt"
    "learn/lib/config"                           // 引入 config 模块, config 模块在 lib/config 目录下, 模块与文件夹同名
    "learn/lib/summary"                          // 引入 log 模块, log 模块在 lib/summary 目录下, 模块与文件夹不同名
}

func main() {
    fmt.Println("import config")
    config.Head()                                // 使用 config 包内的函数
    log.Display()                                // 使用 log 包内函数
}