跳至主要內容

模块系统

LincZero大约 1 分钟

模块系统

为什么要包:

  • 分门别类
  • 解决同名问题 (一个包内不能有同名的东西,不同包的东西可以同名)

语法

包声明语句 (package)

语法:

  • 通常是第一行

  • 包名问题

    尽量保持package的名字和目录名保持一致 (推荐一致,非强制,但若不遵守则该目录的其他文件也要有相同的包名), 尽量采取 有意义 简短 不与标准库冲突 的包名

    // goPorject/src/projtec1/uint2/demo06/xxx.go
    package demo06
    ...
    
  • main包

    另外,main包规定是程序入口。有main包和main包里面的main函数才会得到可执行文件

    (不建议做法:只要package XXX和下面的func XXX(){}这两个一样就可以正常的编译运行。但最好还是要有个main包和main函数)

    (可执行程序 必须要有main包及里面的main函数,否则报错)

包导入语句 (import)

语法:

  • import 导入语句通常在文件开头,包声名语句的下面。包名用双引号包括

  • import 语句有批量导入的语法糖

  • 包名从 $GOPATH/src/ 后开始计算,使用 / 进行路径分隔

    补充:注意 GOPATH 是Windows的系统变量,所以标准库的导入不需要路径

    补充:最新版本需要禁止GO111MODULE,否则无法用GOPATH

import "fmt"
import "..."

// 或
import (
    "fmt"
    "..."
)

自定义包

例如:

src/demo17/test/util.go

package test
var StuNo int = 20034
func GetConn() {
    ...
}

src/demo17/main/test.go

package main
import (
    "fmt"
    "demo17/test" // 将项目路径添加到 $GOPATH 系统变量的方法 (什么傻逼玩意,酱紫用? 一般自定义包不都先教用相对路径么)
)

func main() {
    fmt.Println(test.StuNo)
    test.GetConn()
}

常用包

这里建议看文档,中文文档:studygolang.com/pkgdoc

  • fmt