4.代码集:包

Tuesday, July 11, 2023

到目前位置,一直将代码放在一个文件里,随着程序变得越来越大、越来越复杂,这会是一个大问题~

使用包在程序之间共享代码

将共享函数移到新的包中!

golang允许定义自己的包,包是一组代码,fmt包格式化输出,math包处理数字,strings包处理字符串,已经在多个程序中使用了来自每一个包的函数。

能够在程序之间使用相同的代码是包存在的主要原因之一。

go工作区目录保存包代码

工作区目录包含三个子目录:

  • bin :保存已编译的二进制可执行程序;
  • pkg :保存已编译的二进制包文件;
  • src :保存go的源代码;

在src中,每个包的代码都位于它自己单独的子目录中,按照惯例,子目录名应与包名相同。

每个包目录应该包含一个或多个源代码文件,文件名不重要,但要以 .go 结尾。

创建一个新包

做一个简单的包:

go
└── src
    └── greeting
        └── greeting.go

与所有go源代码文件一样,这个文件以package行开始,与其他代码不同,这段代码不是main包的一部分,是一个名为greeting的包的一部分。还有两个函数定义,希望这些函数可以在greeting包之外访问,所以需要首字母大写:

package greeting

import "fmt"

func Hello() {
	fmt.Println("Hello!")
}
func Hi() {
	fmt.Println("Hi!")
}

将包导入程序

在程序中使用新包:

go
└── src
    ├── greeting
    │   └── greeting.go
    └── hi
        └── main.go

与每个go源代码文件一样,这段代码从package开始,但希望这是一个可执行的命令,需要使用main的包名。

通常,包名应与所在目录名保持一致,但是main包例外。

package main

import "greeting"

func main() {
	greeting.Hello()
	greeting.Hi()
}

导入greeting包,该目录名与 import 语句中的名称相匹配。

包使用相同的文件布局

与main包一样,都要有三部分结构: package 子句、import 语句、实际代码。

包命名规范

每次调用包中的函数时都要输入包名,包名遵循以下规则:

  • 包名应全部为小写;
  • 若含义明显,应缩写;
  • 尽可能是一个词,若是两个词,不应该用下划线分隔,第二个词也不应该大写;
  • 导入的包名避免与本地变量名冲突;

包限定符

当访问从不同包导出的函数、变量或其他东西时,需要通过在函数或变量前输入包名来限定其名称;当访问定义在当前包中的函数或变量时,不应该限定包名。

常量

许多包导出常量:从不更改的命名值。

声明常量看起来像变量声明,具有名称、可选的类型和常量值,不同点:

  • 使用const关键字而不是var关键字;
  • 必须在声明常量时赋值,不能像变量那样后赋值;
  • 变量有短变量声明语法,常量没有;

与变量声明一样,可以省略类型,将从分配的值推断:const SquareSides = 4 ;

变量的值可以变化,但常量值必须保持不变。

与变量和函数一样,名称以大写字母开头的常量是可导出的。

嵌套的包目录和导入路径

可以将类似的包组嵌套在go工作区的一个目录中,然后该目录将成为它包含的所有包的导入路径的一部分。

使用"go install"安装程序可执行文件

与go build 不同,go install 以包含代码的目录来命名可执行文件。将存储在工作区中名为 bin 的目录中。

设置GOPATH

GOPATH 是一个环境变量,go工具会参考它来查找工作区位置。大多数开发者将所有代码都保存在一个工作区中,但也可以使用 GOPATH 将工作区转移到其他目录。

若代码存储在默认目录之外的地方,需要设置GOPATH: export GOPATH="/xxxx/xxx".

发布包

可以在git等仓库中保存代码,这样其他开发人员就可以在自己的项目中使用它。

import (
       "fmt"
       "github.com/abc/defg"
       "log"
)

func main() {
       fmt.Print("xxxxxx")
       grade, err := defg.GetFloat()
       if err != nil {
              log.Fatal(err)
       }
}

使用"go get"下载和安装包

使用包所在的URL作为导入路径,可以使用go get自动下载和安装包:go get github.com/abc/defg.

go将连接到github,下载存储库并将其保存在go工作区的src目录中。

使用"go doc"阅读包文档

可以使用 go doc 命令来显示关于任何包或函数的文档。
例如: go doc strconv go doc strconv ParsetFloat

使用doc注释记录包

若希望用户看到有关包或函数的文档,需要自己添加。

只需在代码中添加文档注释,直接出现在package子句或函数声明之前的普通go注释将被视为文档注释,将显示在go doc 的输出中。

添加文档注释时,需要遵循一些惯例:

  • 注释应该是完整的句子;

  • 包注释应以 Package 开头,后跟包名; Package mypackage enable widget management

  • 函数注释应以其描述的函数的名称开头; MyFunction converts widget to gizmos

  • 可以通过缩进在注释中包含代码示例;

  • 除了代码示例的缩进,不要为了强调或格式化添加额外的标点符号。文档注释将显示为纯文本,并以这种方式进行格式化;

在web浏览器中查看文档

可以在搜索引擎中搜索。

使用"godoc"提供HTML文档

godoc 工具根据主要的go安装和工作区中的代码生成HTML文档。

可以在web服务器模式运行 godoc :godoc -http=:8880 ,然后可以在浏览器中访问:http://localhost:8880/pkg

“godoc"服务器包含你的包

除了来自go标准库的包之外,godoc 还为go工作区中的任何包构建HTML文档,这些包有可能是第三方的包,也可能是自己写的包。

Golang打怪升级

5.数组

3.函数

comments powered by Disqus