03-库源码文件

库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(遵从Go语言规范)。

其他代码的位置

  1. 与被使用的程序实体在同一个源码文件内,
  2. 在其他源码文件内,
  3. 在其他代码包中。

在Go语言中,程序实体是变量、常量、函数、结构体和接口的统称。我们总是先声明(或定义)程序实体,然后再去使用。程序实体的名字被统称为标识符(可以是任何Unicode编码可以表示的字母字符、数字以及下划线,但是首字母不能为数字)。从规则上来看,可以使用中文作为变量的名字

0.1. 如何把命令源码文件中的代码拆分到其他库源码文件

下面有样例代码demo4.go:

package main

import (
	"flag"
)

var name string

func init() {
	flag.StringVar(&name, "name", "everyone", "The greeting object.")
}

func main() {
	flag.Parse()
	hello(name)
}

函数hello()被声明在另外一个源码文件中:

// 需在此处添加代码。[1]

import "fmt"

func hello(name string) {
	fmt.Printf("Hello, %s!\n", name)
}
  1. 注释处需要填入package main的名字。因为同一个目录下的源码文件需要被声明属于同一个代码包。如果该目录下有一个命令源码文件,那么为了让同一个目录下的文件都通过编译,其他源码文件应该被声明为属于main包。

0.2. 代码包声明的基本原则

  1. 同目录下的源码文件的代码包声明语句必须要一致。即它们要同属于一个代码包。这对所有源码文件都适用。如果目录中有命令源码文件,那么其他种类的源码文件也应该声明属于main包,这是可以成功构建并允许的前提。
  2. 源码文件声明的代码包的名称可以与其所在的目录的名称不同。在针对代码包进行构建时,生成的结果文件的主名称与其父母的名称一致

导入路径:源码文件所在的目录相对与src目录的相对路径就是它的代码包导入路径, 限定符:实际使用其程序实体时给定的限定符要与它声明所属的代码包名称对应

通常情况下,总是让声明的包名与其父目录的名称一致。

0.2.1. 程序实体的访问权限

名称的首字母大写的程序实体才可以被当前包外的代码引用,否则它就只能被当前包内的代码引用。

0.2.2. 其他访问权限规则

Go1.5之后的版本,通过创建internal代码包让一些程序实体仅仅能被当前模块中的其他代码引用。这是Go语言的第三种访问权限:模块级私有。

internal代码包中声明的公开程序实体仅能被该代码的直接父包及其子包中的代码引用。引用之前先要导入这个internal包,对于其他代码包,导入行为是非法的,不能通过编译。

上次修改: 25 November 2019