Go 语言核心 36 讲
郝林
《Go 并发编程实战》作者,前轻松筹大数据负责人
79610 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
Go 语言核心 36 讲
15
15
1.0x
00:00/00:00
登录|注册

03 | 库源码文件

Go 1.5及后续版本中,通过创建internal代码包让一些程序实体仅能被当前模块中的其他代码引用
名称的首字母为大写的程序实体才可以被当前包外的代码引用
构建或安装代码包时,提供给go命令的路径应该是目录的相对路径
构建生成的结果文件的主名称与其父目录的名称一致
目录中有命令源码文件,其他种类的源码文件也应该声明属于main
对于程序实体,还有其他的访问权限规则吗?
什么样的程序实体才可以被当前包外的代码引用?
代码包的导入路径总会与其所在目录的相对路径一致
源码文件声明的代码包的名称可以与其所在的目录的名称不同
同目录下的源码文件的代码包声明语句要一致
怎样把命令源码文件中的代码拆分到其他库源码文件?

该思维导图由 AI 生成,仅供参考

你已经使用过 Go 语言编写了小命令(或者说微型程序)吗?
当你在编写“Hello, world”的时候,一个源码文件就足够了,虽然这种小玩意儿没什么用,最多能给你一点点莫名的成就感。如果你对这一点点并不满足,别着急,跟着学,我肯定你也可以写出很厉害的程序。
我们在上一篇的文章中学到了命令源码文件的相关知识,那么除了命令源码文件,你还能用 Go 语言编写库源码文件。那么什么是库源码文件呢?
在我的定义中,库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话)。
这里的“其他代码”可以与被使用的程序实体在同一个源码文件内,也可以在其他源码文件,甚至其他代码包中。
那么程序实体是什么呢?在 Go 语言中,程序实体是变量、常量、函数、结构体和接口的统称。
我们总是会先声明(或者说定义)程序实体,然后再去使用。比如在上一篇的例子中,我们先定义了变量name,然后在main函数中调用fmt.Printf函数的时候用到了它。
再多说一点,程序实体的名字被统称为标识符。标识符可以是任何 Unicode 编码可以表示的字母字符、数字以及下划线“_”,但是其首字母不能是数字。
从规则上说,我们可以用中文作为变量的名字。但是,我觉得这种命名方式非常不好,自己也会在开发团队中明令禁止这种做法。作为一名合格的程序员,我们应该向着编写国际水准的程序无限逼近。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Go语言中命令源码文件和库源码文件的关系,以及如何进行代码拆分和组织。作者首先解释了库源码文件的概念,并通过示例演示了如何将命令源码文件中的代码拆分到其他库源码文件。文章重点讲解了代码包声明的基本规则,强调了同目录下的源码文件的代码包声明语句要一致。作者还提出了一个问题,引导读者思考如何修改代码以使其通过编译,并给出了修改后的代码示例。此外,文章还涉及了程序实体的访问权限规则和模块级私有的概念。总的来说,本文详细讨论了把代码从命令源码文件中拆分出来的方法,涉及了几条重要的Go语言基本编码规则,对于进行模块化编程的读者来说是一篇有价值的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言核心 36 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(82)

  • 最新
  • 精选
  • daydayyiday
    置顶
    注意是核心36讲,不是三个月从入门到精通,建议可以先从教程预习一下https://tour.go-zh.org/welcome/1

    作者回复: 好,你这个留言可以作为精选了:)。从零基础怎么一步步走我已经画好图了,择日发布。

    2018-08-17
    4
    58
  • 婺华
    置顶
    我也觉得这种学习方式挺好,是新的尝试,因为对于有点基础的同学,总比去看太过基础的东西来的有效率,讲到点子上,也是不错的
    2018-08-16
    6
  • Dylan
    置顶
    讲得很到位呢,之前因为想看以太坊的源码,自己已经啃了一遍Go语言,现在回过头来在跟着老师学习,受益匪浅呀~

    作者回复: 对大家有帮助就好!

    2018-08-15
    15
  • 松烽
    置顶
    可以先看看郝爷的Go并发编程,真不错,很体系
    2018-08-15
    9
  • dittolÖk
    还是不太适应这种学习方式

    作者回复: 你好,具体说说怎么不适应呢?

    2018-08-15
    7
    61
  • 云学
    go语言有些地方设计的太坑了,感觉没有审美观,首字母大写这个在其他语言是用来表示类型的,它偏要独树一帜,看来还是python的哲学好! 建议作者多给出一些最佳实践,不太习惯这种踩坑式教学,语言的第一感觉很重要,这些坑以附录的形式给出比较合适。

    作者回复: 你好,每个语言几乎都有自己风格和编程哲学,学以致用最重要,一些细节不用太在意。

    2018-08-15
    3
    13
  • 萧末
    可以通过包别名的方式解决冲突,如果导入的包不显式使用可以采用匿名的方式导入包

    作者回复: 答得很好。

    2018-08-15
    7
  • Realm
    1 导入包时,import的是相对src的相对文件路径,使用包内的函数时,其限定符是:包名.函数名(),压根与程序的文件名没有啥关系. 2 大写:Prubic;小写:private.

    作者回复: 说得很多,源码文件名是代码包内部的细节,不对外暴露。

    2018-08-15
    7
  • Erico.Len
    第一次接触go,虽然大学学过C,第一次看的很焖不知道联系 照着敲代码 看到报错后分析问题 疑问就会豁然开朗 建议以后可以举例一些实际项目中会关联的问题 ,通过这节课我觉得可以体会到以后搭建项目中包和目录以及程序实体之间的联系。比如MVC这个怎么布置会更合理一些 本人刚学意见不知道是否合理 望老师谅解

    作者回复: MVC其实是一种设计模式组合,这在Java盛行的时代很流行。Java的很多Web框架都把这个组合模式实现了,然后提供完整的API给你。但是现在互联网尤其是移动互联网时代这就有些过时了,因为前端面向的端不只网页浏览器一个了,不适合再由写后端的人去搞了,所以前后端分离的做法开始流行起来,MVC这种前后端通吃的模式用的人就少了。建议你即使自己搞网站也不要用完整的MVC,这种模式现在看起来太重了,不太适合快节奏开发。

    2018-08-16
    5
  • leo
    老师好,对于包管理的问题,之前会遇到cycle的问题,报错信息也很少,是否有什么定位方法?

    作者回复: 你好,我记得现在go命令会报错的吧。

    2018-08-15
    5
收起评论
显示
设置
留言
82
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部