mac搭建golang开发环境并sayhello
安装
安装完毕可以在终端输⼊go version来确认是否安装成功。
环境变量
go语言开发环境搭建1.建⼀个⽂件夹:"your path"/"your dir",并在这个dir下⾯mkdir三个⼦⽂件夹bin,pkg和src,例如我的是
/Users/username/workspace/goProject,那么实际如下所⽰。bin,pkg和src下⾯的东西,那些是后⾯测试时加⼊的,请假装没看见。
2.vim ~/.bash_profile,按1中情况进⾏编辑,内容如下,主要是GOPATH需要设置为1中的"your path"/"your dir":
3.退出.bash_profile执⾏source ~/.bash_profile,并使⽤go env命令查看⽣效否,GOOS="darwin"是编译在mac上运⾏的binary,如果是交叉编译linux上运⾏,则GOOS="linux",当然这个可以在makefile⾥搞:
为什么要先创建src,bin和pkg后source .bash_profile?因为如果反着来,有的时候go env看到的GOPATH会是空,不纠结原因了。
src:存放项⽬源码,你⾃⼰⼿动放,包括编译成可执⾏⽂件的源码和编译成pkg的源码;
bin:存放编译后的可执⾏⽂件,go install帮你放;
pkg:存放编译后⽣成的包⽂件,go install帮你放,你要⾃⼰放也没⼈拦。
say hello
GOPATH/src是存放源⽂件的地⽅,但是我可能有多个project,没关系,在GOPATH/src下建⽴不同的project⼦⽂件对应不同的project,在这些项⽬⼦⽂件⾥放各⾃的go源码⽂件,像我这样有三个project,分别是helloworld,mytest和mypkg,其中前两者是带main的main package,⽽mypkg则是没有main函数的pkg。
代码如下:
-------------------------------------------------------------------
package main
import "fmt"
func main(){
fmt.Printf("Hello World!\n")
}
-----------------------------------------------------------------------------
package mypkg
import "fmt"
func Myfunc(){
fmt.Println("mypkg say:我很紧张,⽽且很害怕
对于src/helloworld下的可执⾏⽂件⽐如:
1. go run:可在任意路径下执⾏ go run path/,⽐如直接在src下执⾏go run ,也可以
在goProject下执⾏go run src/,效果就是编译并执⾏,但是编译的可执⾏⽂件不会保留;go run的参数只能是go⽂件;
2. go build:可在任意路径下执⾏go build path/, ⽐如直接在src/helloworld下执⾏go ,也
可以在goProject下执⾏go build src/,效果就是编译,编译的可执⾏⽂件会放在执⾏⽬录下,所以,没法在src下执⾏go build ,因为编译⽬标⼆进制的helloworld和⽬录helloworld重复,当然可以使的go⽂件名和⽬录名不⼀致,编译结果是和go⽂件名⼀致的,⽐如,在src下执⾏go build
将会在src下⽣成可执⾏⽂件hello;也可执⾏go build path/to/helloworld,此时可能helloworld下有多个.go ⽂件都属于package main(但是只有⼀个定义了main函数),此时⽣成的⼆进制⽂件名是和⽬录helloworld同名的;综上go build 的参数可以是go⽂件也能是⽬录;还需要注意,参数是go⽂件时可以指定详细路径,参数是⽬录时,默认从GOPATH开始,所以编译⽬录时不能带path/to/src,⽽是从src下开始起算路径;
3. go install:可在任意路径下执⾏go install path/to/helloworld,会把该路径下的go⽂件编译出⼀个可执⾏⽂件放在bin下⾯,但是
假设helloworld下⾯有两个go⽂件和都定义了main函数,那么只能go install path/to/ 这样⼦;如果helloworld下有多个.go⽂件都属于package main(但是只有⼀个定义了main函数),此时⽣成的⼆进制⽂件名是和⽬录helloworld同名的且放在GOPATH/bin下⾯;综上go install的参数可以是go⽂件也能是⽬录;还需要注意,参数是go⽂件时可以指定详细路径,参数是⽬录时,默认从GOPATH开始,所以编译⽬录时不能带path/to/src,⽽是从src下开始起算路径;
对于src/mypkg包,
1. go run:在任意⽬录下执⾏go run path/to/都不会有任何卵⽤的,会提⽰你pkg不能run;
2. go build:可在任意⽬录下执⾏go build path/to/,也能执⾏go build path/to/mypkg只能测试⽂件是否能正常
编译,不会产⽣任何结果;综上go build的参数可以是go⽂件也能是⽬录;还需要注意,参数是go⽂件时可以指定详细路径,参数是⽬录时,默认从GOPATH开始,所以编译⽬录时不能带path/to/src,⽽是从src下开始起算路径;
3. go install:可以像这样,src/mypkg/,src/mypkg/,也就是src/mypkg下有
mypkg1和mypkg2两个pkg,然后在任意⽬录执⾏go install path/to/mypkg/mypkg1和go install path/to/mypkg/mypkg2,对于pkg⽂件,看起来对于pkg不能install go⽂件,只能install⽬录,这样的效果,会在 pkg/darwin_amd64下⾯产⽣
mypkg/mypkg.a和mypkg/mypkg2.a,和src下的路径相⽐,mypkg1和mypkg2两个⼦路径没有了,也就是说对于pkg来
说,install会在GOPATH/pkg下⾯保留GOPATH/src/xxxpkg这个包顶层⽬录。还需要注意,参数是go⽂件时可以指定详细路径,参数是⽬录时,默认从GOPATH开始,所以编译⽬录时不能带path/to/src,⽽是从src下开始起算路径;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论