09.手撕Go语言-包

imsilence · · 659 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

声明

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

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:imsilence

查看原文:09.手撕Go语言-包

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

659 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传