【发布时间】:2015-07-27 10:40:58
【问题描述】:
在 Go 规范的 package initialization 部分中,“词法文件名顺序”是什么意思?
为确保可重现的初始化行为,构建系统是 鼓励呈现属于同一个包的多个文件 编译器的词法文件名顺序。
【问题讨论】:
-
我投票决定将此问题作为离题结束,因为它太基础了,与编码无关。
标签: go lexicographic
在 Go 规范的 package initialization 部分中,“词法文件名顺序”是什么意思?
为确保可重现的初始化行为,构建系统是 鼓励呈现属于同一个包的多个文件 编译器的词法文件名顺序。
【问题讨论】:
标签: go lexicographic
来自Wikipedia:
词汇顺序是单词的字母顺序基于其组成字母的字母顺序的一种概括。
实际上,这意味着文件名作为字符串进行比较,使用字符代码来决定顺序。英文字母的字符代码顺序遵循字母的自然顺序,但如果非字母也是文件名的一部分(例如数字和其他字符,如 '-'),则字符代码顺序很重要。
如果包包含多个源文件,这只是定义源文件(任意)顺序的约定,如果重新编译包(当然文件没有重命名),则顺序保持不变。
目的是使源文件始终以相同的顺序处理,因此包init() 函数也将以相同的顺序执行,您将观察到相同的行为。通常包init() 函数的顺序无关紧要,但在某些情况下可能确实如此。通过遵循这个词法文件名顺序约定,您可以依赖init() 函数的(固定)执行顺序。
【讨论】: