一、环境配置
设置GOROOT: GO的安装路径, 此处设为D:\Program Files\Go\。
设置GOPATH: GO项目的存放路径,可以多个, 此处设为 D:\workspace_go。
新建GO项目存放路径:D:\workspace_go,且在该目录下新建文件夹 bin、pkg、src,其中src 目录用来存储GO项目的代码。
备注:.go源文件在import 其它包的时候,是去GOROOT/src 和 GOPATH/src 路径下寻找指定的文件夹,如 import (“fmt”,“study_go/base”)会去GOROOT/src 和 GOPATH/src 路径下去寻找fmt 文件夹 和 study_go/base 文件夹。注意是寻找文件夹,而不是文件夹内部的go源文件定义的package。也就是说 go语言的import 语句导入的其实是文件夹,而不是go源文件中定义的package。一个文件夹内的go源文件只能指定一个package,不能指定多个!即同一个文件夹内的所有go源文件必须是同一个package,且通常情况下package名与文件夹名一致。
二、新建项目study_go
在D:\workspace_go\src 目录下新建项目文件夹study_go。
1、在D:\workspace_go\src \study_go下新建文件夹main
2、在main文件夹下新建Base.go文件:
package main import "fmt" func Invoke1() { fmt.Println("Base invoke1>>>>>>") }
3、在main文件夹下新建Main.go文件:
package main import ( "fmt" ) func init() { fmt.Println("main init......") } func main() { fmt.Println("hello world!") Invoke1() }
4、编译main文件夹下的可执行文件:
在任何路径下执行:
go build study_go/main
会在执行路径下生成可执行文件: main.exe
执行main.exe 输出结果:
main init......
hello world!
Base invoke1>>>>>>
备注:(1)同一个文件夹内的所有go源文件必须是同一个package。
(2)相同package中的go源文件可以直接相互调用函数(前提:该函数有开放权限,如函数首字母大写)。
5、在D:\workspace_go\src\study_go下新建文件夹base,
在base文件夹下新建文件Base_1.go文件:
//一个文件夹目录下只能有一个package,且该package通常与文件夹名相同 package base1 import "fmt" func Invoke1() { fmt.Println("base.base_1 invoke1>>>>>>") }
此处我们修改Main.go文件:在Main.go文件中引入base文件夹,且在main函数中调用Base_1.go中的方法
package main import ( "fmt" "study_go/base" ) func init() { fmt.Println("main init......") } func main() { fmt.Println("hello world!") base1.Invoke1() Invoke1() }
注意:import时导入的是“study_go/base”,是文件夹路径。在调用函数时是base1.Invoke1()。即利用包名进行调用。
重新生成可执行文件并执行,输出结果:
main init......
hello world!
base.base_1 invoke1>>>>>>
Base invoke1>>>>>>
6.在study_go下新建文件夹main2,并在此文件夹下新建一个文件Main2.go
package main import ( "fmt" ) func init() { fmt.Println("main2 init......") } func main() { fmt.Println("hello world!") }
编译main2的可执行文件: go build study_go/main2,生成main2.exe。执行输出结果:
main2 init......
hello world!
注意:Main2.go中不能调用main文件夹中的Base.go中的方法,虽然在代码层次,他们都属于同一个main包,但是在编译main2的时候,main2与Base文件夹没有任何关系。而且Main2.go也不能import study_go/main, 因为包含main函数的文件夹不能导入到其他go文件。
包含main()函数的文件夹不能导入到其他go文件。
7. 不划分文件夹
如果study_go项目下不划分文件夹,而是把所有go文件直接放在study_go目录下,所有go文件中的package 都为main。
编译可执行文件:(1)在study_go目录下执行:go build 。生成study_go.exe
(2)任意目录下执行:go build study_go。生成study_go.exe