要学一下GO了,工作中要用到。
第一步我不怎么关心语法啊什么的,我而是关心一个GO工程的目录结构是怎么样的。通过学习这篇文章《理解Golang包导入》,我大体初步了解了一个Go工程的基本结构。
以下在windows下使用LiteIDE进行Go的开发与测试
目录结构:
G:\Go_project\pkgtest\
----------------------pkg\
----------------------src\
-------------------------app1\
------------------------------main.go
-------------------------libproj1\
----------------------------------foo\
-------------------------------------foo1.go
主要的测试文件还是在src目录下
一.main使用系统提供的的包
package main
import (
"fmt"
)
func main() {
fmt.Println("it works")
}
很简单,既然是系统提供的,就是这么直接的一个import ("fmt")就可以了,代码就能正常工作了
二.main使用libprog1下用户自定义的包
foo目录下fool.go的内容为
package foo
import "fmt"
func Fool() {
fmt.Println("Fool")
}
app1目录下main.go内容为
package main
import (
"libproj1/foo"
)
func main() {
foo.Fool()
}
在LiteIDE下执行ctrl+R后,提示不能编译,查了原因是没有配置GOPATH,那进行一下GOPATH的配置:
再执行以下ctrl+R,可以运行了
三.main使用libprog1下用户自定义的包,包名和包含包的目录不同名
foo目录下fool.go内容为
package author //包的名字是author,和上面的例子不同
import "fmt"
func Fool() {
fmt.Println("Fool")
}
app1目录下main.go内容为
package main
import (
"libproj1/foo" //import的路径还是一样的
)
func main() {
author.Fool() //引用的包的名字却要改变一下下了
}
ctrl+R后,依然可以正常工作
四.main使用libprog1下用户自定义的包,包名和包含包的目录不同名,main给第三方包起个名字再用
foo目录下fool.go内容和上面的一样
app1目录下main.go内容为
package main
import (
other "libproj1/foo" //为指定目录下的那个包author起个名字叫other
)
func main() {
other.Fool() //直接用other
}
ctrl+R后可以工作
五.在上面的例子的基础上,在libprog1下新建同名包的文件fool2.go
G:\Go_project\pkgtest\
----------------------pkg\
----------------------src\
-------------------------app1\
------------------------------main.go
-------------------------libproj1\
----------------------------------foo\
-------------------------------------foo1.go
-------------------------------------foo12.go
fool2.go的文件内容为
package author
import "fmt"
func Fool2() {
fmt.Println("Fool2")
}
app1目录下main.go内容为
package main
import (
other "libproj1/foo"
)
func main() {
other.Fool()
other.Fool2()
}
ctrl+R后,可以工作
六.在上面的例子的基础上,在libprog1下新建不同名包的文件fool2.go,main依然使用别名other
fool2.go文件内容为
package author2
import "fmt"
func Fool2() {
fmt.Println("Fool2")
}
ctrl+R,这下报错了,无法编译
七.在上面的例子的基础上,在libprog1下新建不同名包的文件fool2.go,main使用fool.go,fool2.go中自己的包名
main.go内容为
package main
import (
"libproj1/foo"
)
func main() {
author.Fool()
author2.Fool2()
}
ctrl+R,依然报错
总结:
1.用户要定义自己的包然后使用的话,需要配置GOPATH
2.一个包下面,所有的go文件申明的包名应该是同一个
3.main在import包的时候,import的是包的路径
4.main在使用包的时候,使用的是包名
5.因为一个包下面的包名是唯一的,所以import的时候可以给它起个别名