2017-6-6 9:23 Tuesday有关GO的包引用:包名和目录名的关系
比如我src目录下有一个sites/okadwin.com的目录,一般情况下,包名称都是和目录名称相同的,我用的IDE是gogland,IDE会自动将包名提示为当前目录名,这也是我们一般的做法。
可是在GO中,包名是不能有特殊字符,比如小数点(.)的,那么我们的okadwin.com其实就是一个非法的包名,所以IDE就自动给提示成了okadwin_com这样的形式,把点换成了下划线,可是在引用的时候出了问题,如果我们引用sites目录下的okadwin_com这个包,会提示不存在,经过一番验证之后,得出如下结论:
这种情况下,import语句中包含的是目录名,也就是说要写【import "sites/okadwin.com"】这样,但是在引用包的时候,必须写package的名字,比如我们在GO文件中按照IDE的自动提示写的是package okadwin_com,那么我们在引用包中的函数/方法/类型的时候,就必须要使用包名,而不是目录名,比如如下引用:okadwin_com.func1()
相信很多初学者也和我一样,目录名和包名傻傻分不清楚是怎么回事,一直不知道import写的到底是目录名还是包名,包名是不是必须和目录名一致,现在有结论了:
包名不必和目录名一致,但为了更好的维护和更高的可读性,普遍的做法是报名和目录名一致,如若不一致,import的时候要写目录名,引用的时候要写包名。