美文网首页
09.手撕Go语言-包

09.手撕Go语言-包

作者: imsilence | 来源:发表于2019-06-26 21:42 被阅读0次

包是函数和数据的集合,将有相关特性的函数和数据放在统一的文件/目录进行管理,每个包都可以作为独立的单元维护并提供给其他项目进行使用

声明

Go源文件都需要在开头使用package声明所在包,包名告知编译器哪些是包的源代码用于编译库文件,其次包名用于限制包内成员对外的可见性,最后包名用于在包外对公开成员的访问

包名使用简短的小写字母,常与所在目录名保持一致,一个包中可以由多个Go源文件,但必须使用相同包名

09.01.png

声明两个包,路径分别为gpkgname/pkg01和gpkgname/pkg02

导入&调用

在使用包时需要使用import将包按路径名导入,再通过包名调用成员

可通过import每行导入一个包,也可使用括号包含所有包并使用一个import导入

09.02.png

工作目录结构说明:

  • bin: 用于放置发布的二进制程序
  • pkg: 用于放置发布的库文件
  • src: 用于放置源代码

运行:

  1. 将chapter08/gv目录添加到GOPATH环境变量中
  2. 编译&运行
    • 使用go build编译二进制文件

      命令:go build gpkgmain

      说明:编译路径gpkgmain下的包,main包,则在当前目录产生以pkgmain命名的二进制程序

    • 使用go run运行二进制文件

      命令:go run gpkgmain

    • 使用go install编译并发布二进制文件

      命令:go install gpkgmain

      说明:编译并发布路径gpkgmain下的包,main包,则在将编译后的以pkgmain命名的二进制程序拷贝到bin目录

    • 使用go install编译发布库文件

      命令:go install gpkgname/pkg01

      说明:编译并发布路径gpkgname/pkg01下的包,非main包,则在将编译的以包名命名的库文件拷贝到pkg/GOOS_GOARCH目录下

    • 使用go install编译发布所有二进制和库文件

      命令:go install ./…

      说明:编译并发布当前路径下的所有二进制程序和库文件

注意:Go语言不允许交叉导入包

导入形式

  1. 绝对路径导入

    在GOPATH目录中查找包

    示例:

    • import "fmt"
    • import "gpkgname/pkg01"
  2. 相对路径导入

    在当前文件所在的目录查找

    示例:import "./gpkgname/pkg02"

  3. 点导入

    在调用点导入包中的成员时可以直接使用成员名称进行调用(省略包名)

    09.03.png
  4. 别名导入

    当导入不同路径的相同包名时,可以别名导入为包重命名,避免冲突

    09.04.png
  5. 下划线导入

    Go不允许包导入但未使用,在某些情况下需要初始化包,使用空白符作为别名进行导入,从而使得包中的初始化函数可以执行

    09.05.png

成员可见性

Go语言使用名称首字母大小写来判断对象(常量、变量、函数、类型、结构体、方法等)的访问权限,首字母大写标识包外可见(公开的),否者仅包内可访问(内部的)

09.06.png

main包与main函数

main包用于声明告知编译器将包编译为二进制可执行文件

在main包中的main函数是程序的入口,无返回值,无参数

init函数

init函数是初始化包使用,无返回值,无参数。建议每个包只定义一个。init函数在import包时自动被调用(const->var->init)

09.07.png 09.08.png 09.09.png

标准包

Go提供了大量标准包,可查看:https://golang.google.cn/pkg/

godoc工具

使用godoc命令可以在本地启动golang网站,用于本地查看帮助手册

09.10.png

帮助

  1. go list std:查看所有标准包

    09.11.png
  2. go doc packagename:查看包的帮助信息

    09.12.png
  3. go doc packagename.element:查看包内成员帮助信息

    09.13.png

相关文章

  • 09.手撕Go语言-包

    包是函数和数据的集合,将有相关特性的函数和数据放在统一的文件/目录进行管理,每个包都可以作为独立的单元维护并提供给...

  • Golang io reader writer

    推荐阅读Go语言小贴士1 - io包Go语言小贴士2 - 协议解析Go语言小贴士3 - bufio包 一、《GO语...

  • 08.手撕Go语言-函数

    函数包含函数名、行参列表、函数体和返回值列表,使用func进行声明,函数无参数或返回值时则形参列表和返回值列表省略...

  • 12.手撕Go语言-方法

    方法是为特定类型定义的,只能由该类型调用的函数 定义 方法是添加了接收者的函数,接收者必须是自定义的类型 举例: ...

  • 13.手撕Go语言-接口

    接口是自定义类型,是对是其他类型行为的抽象 定义 接口定义使用interface标识,声明了一系列的函数签名(函数...

  • 01.手撕Go语言-初识

    简介 Go是一门开放源码的编程语言,可容易的构建简单、可靠和高效的软件 历史 Go语言是由谷歌的开发工程师(罗伯特...

  • 02.手撕Go语言-基础

    第一个Go程序 解读: a. package Go源文件开头必须使用package声明代码所属包,包是Go代码分发...

  • 16.手撕Go语言-测试

    Go提供了test工具用于代码的单元测试,test工具会查找包下以_test.go结尾的文件,调用测试文件中以Te...

  • 14.手撕Go语言-反射

    反射是指在运行时动态的访问和修改任意类型对象的结构和成员,在go语言中提供reflect包提供反射的功能,每一个变...

  • 手撕包

网友评论

      本文标题:09.手撕Go语言-包

      本文链接:https://www.haomeiwen.com/subject/haohcctx.html