我感覺我要學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的時候可以給它起個別名


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章