Skip to content

Latest commit

 

History

History
84 lines (60 loc) · 2.93 KB

index.md

File metadata and controls

84 lines (60 loc) · 2.93 KB

包是 Go 语言中代码组织和代码编译的主要方式,包是多个 Go 源码的集合,是一种高级的代码复用方案,Go 的标准库提供了大量的内置包(如:fmt 和 os),但是你也可以根据需要创建自己的包。

包的声明

一个包可以简单理解为一个存放 .go 文件的文件夹。 该文件夹下面的所有 go 文件都要在代码中非注释的第一行声明该文件归属的包:

package 包名 注意事项:

  • 包名要使用简短而简洁的不含有 _(下划线)的小写单词来命名。
  • 包名一般采用单数的形式(标准库的 bytes、errors 和 strings 使用了复数形式,这是为了避免和预定义的类型冲突)
  • 包名为 main 的包为应用程序的入口包,main 包编译后会得到一个可执行文件,而编译不包含 main 包的源代码则不会得到可执行文件。
  • 一个目录下的所有文件只能定义一个包名,定义多了会报错
  • 不通的目录下可以定义相同的包名

包的可见性

如果想在一个包中引用另外一个包里的标识符(如变量、常量、类型、函数、结构字段等等)时,该标识符必须是首字母大写的,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )。

包的导入

要在代码中引用其他包的内容,可以使用 import 关键字导入要使用的包,Go 语言中禁止循环导入包(即 A 导入 B,B 导入 C,C 又导入 A),import 的一般格式如下:

import "包的路径或 URL 地址" 

导入多个包时,建议使用一个括号括起来。

import (
    "fmt"
    "os"
)

导入的包之间可以通过添加空行来分组;通常将来自不同组织的包独自分组。包的导入顺序无关紧要,但是在每个分组中一般会根据字符串顺序排列。(gofmt 和 goimports 工具都可以将不同分组导入的包独立排序。)

import (
    "fmt"
    "html/template"
    "os"

    "golang.org/x/net/html"
    "golang.org/x/net/ipv4"
)

一个完整的Demo

下面我们通过自定义一个工具util包,并在包中实现一个打印方法

//main.go
package main

import (
	"fmt"
	"go-training/2-code-organize/package/util"
)

func main() {
	fmt.Println("2")
	util.Add()
}

接下来在项目目录下创建一个util目录,并在下面创建一个math.go的文件

package util

import "fmt"

func Add() {
	fmt.Println("这个一个算数加法工具函数")
}

func sub() {
	fmt.Println("这个一个算数加法工具函数,但是外部无法使用")
}

编译运行以后可以看到, util中的方法调用成功了。