我感觉我要学GO之一

要学一下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的时候可以给它起个别名


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值