Go 语言学习之包

01

概念

在 Go 语言中,包由一个或多个保存在同一目录的源码文件组成,包名与目录名无关,但是通常大家习惯包名和目录名保持一致。同一目录的源码文件必须使用相同的包名。

包的用途类似于其他语言的命名空间,可以限制成员的作用域和访问权限。无论是否在同一源码文件的成员,只要在同一个包内,成员均可被访问。但是只有首字母大写的成员为导出成员,可以在包外访问。

除了基于首字母大小写控制访问权限,在 Go 语言中,还可以使用内部包机制来控制访问权限,内部包源码文件存放于包目录的子目录,内部包源码文件的导出成员仅能被其父目录下的包访问。

02

包声明

在 Go 语言中,每一个源码文件开头都必须使用关键字 package 进行包声明(定义包名)。主要目的是限制包内成员的作用域和访问权限,也是当前包被其他包导入时的标识符。包名是导入路径的最后一段,所以不同导入路径的包名可以相同。

03

包导入

  • 导入路径 Go 语言中的每一个包都是通过唯一的字符串进行标识,称为导入路径。
  • 导入声明 在 Go 源码文件中,可以在 package 包声明后面导入一个或多个包,每一个导入的包可以单独使用关键字 import 指定一个导入路径,也可以使用圆括号括起来一组导入路径,使用关键字 import 一次导入多个包,通常大家更喜欢使用第二种方式。 如果在同一个包中导入两个相同包名的包,需要至少为其中一个包起别名来避免冲突,别名仅对当前源码文件有效。有时别名也不止用于避免包名冲突,对于一些较长的包名,为了方便使用,通常也会定义一个短别名。
  • 空白导入 如果导入的包,在源码中没有使用该包名,编译时就会产生错误。但在实际项目开发中,有时我们仅需要使用一个包中的变量和执行它的 init 函数,为了避免此类情况导致的编译错误,我们可以在导入路径前面使用空白标识符 “_” 。

04

包创建

在创建一个包时,尽量使用简短的包名,但是要尽可能保持包名的可读性和无歧义,如果需要用到与 go 关键字同名的包名,一般采用其复数形式。

本文分享自微信公众号 - Go语言开发栈(golanghubcn),作者:frankphper

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Gin 学习之 cookie 读写

    HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起...

    frankphper
  • Golang语言标准库 sync 包的 WaitGroup 怎么使用?

    在 Go 语言中,标准库 sync 包的 WaitGroup 用于父线程(goroutine)等待一组子线程(goroutine)结束,如果正在执行的一组子线程...

    frankphper
  • 基于prometheus的监控方案

    在从物理机部署向容器化部署的过程中,基于目前主流容器编排的k8s系统管理下,传统监控系统无法满足对容器和容器集群以及容器内的服务进行监控的需求。

    frankphper
  • 通过淘宝,大白话讲解大数据各个方向的分工

    1.总跟女票说我是做大数据的,女票也跟她朋友说我是做大数据的,但一问是啥,我跟我女票解释了半天她都没听懂,她也不知道怎么跟她朋友说。最好的解决方法是换女票,当然...

    Java3y
  • Kotlin 1.4 新特性预览

    Kotlin 1.4 的第一个里程碑版本发布了,具体发布信息可以参考1.4-M1 ChangeLog[1]。

    bennyhuo
  • SASS第二篇 注释

    用户7873631
  • 《七天数据埋点之旅》第四天 埋点设计(下)

    关于作者:我是水大人,资深潜水员,一个基于开发、面向分析、走向全栈的饱经摧残的数据新手,爱折腾不爱玩,爱总结爱思考的老兵,错了改改了又错的惯犯。

    木东居士
  • 利用百度的词法分析区分数据

    名人数据:介绍某位名人的一段(一句)话,例如:Raj Babbar,演员,主要作品有《迷宫下的罪恶2》、《天命玩家》、《Bodyguard》等。 非名人数据...

    明天依旧可好
  • 镁客请讲 | 创略科技杨辰韵:打通线上线下数据,用AI和大数据玩转营销

    有的时候,算法本身以及技术并不是难题,最大的问题在于数据收集的维度以及不同数据的打通。

    镁客网
  • VBR的部署

    L宝宝聊IT

扫码关注云+社区

领取腾讯云代金券