标题用 “占用” ,而没有用 “冲突”,是为了强调取名费劲,不是指语言本身不能解决这种冲突。
--
举个例子,
假设我把有关机器各种操作的代码放在一个叫 host 的包里,然后 有个叫 Host 的 struct 。
在调用它的代码中,经常会操作 host.Host 类型的列表(slice 、 map...),很容易写成:
for _, host := range hosts { ... }
这样 host 变量和 host 包名就产生冲突了,接下来循环{}内部就没办法使用 host.XXX 来声明其他变量了。短变量名考虑过 h 之类,但有时候 err != nil 这种判断多了会导致循环体非常长,短名字很容易混淆。
--
阅读了一下其他代码,发现有这样的特点,不知道是否可以作为参考:
包名如果是名词,就用不可数名词,或者不经常可数的,比如 json 、 time 、 http ....
于是我想是不是可以给包名取一个叫 cloud 这种,美其名曰 “云”。。。
--
具体问题:
1. 如何给包命名才能保证不入侵其他名字空间?
2. 根据什么把一段代码拆成一个包?
--
举个例子,
假设我把有关机器各种操作的代码放在一个叫 host 的包里,然后 有个叫 Host 的 struct 。
在调用它的代码中,经常会操作 host.Host 类型的列表(slice 、 map...),很容易写成:
for _, host := range hosts { ... }
这样 host 变量和 host 包名就产生冲突了,接下来循环{}内部就没办法使用 host.XXX 来声明其他变量了。短变量名考虑过 h 之类,但有时候 err != nil 这种判断多了会导致循环体非常长,短名字很容易混淆。
--
阅读了一下其他代码,发现有这样的特点,不知道是否可以作为参考:
包名如果是名词,就用不可数名词,或者不经常可数的,比如 json 、 time 、 http ....
于是我想是不是可以给包名取一个叫 cloud 这种,美其名曰 “云”。。。
--
具体问题:
1. 如何给包命名才能保证不入侵其他名字空间?
2. 根据什么把一段代码拆成一个包?
