Windows 下Golang入门安装,以及第一次代码
1.安装golang
作为中国使用者,必须去中文官网
作为windows铁粉,必须使用windows环境
由于官网下载推荐了google链接,国内无法访问,所以这里推荐国内的正版下载。
去go语言中文网下载,里面提供了windows版本,使用MSI自动安装更方便:
windows安装就是比别的系统方便多了
2.配置环境
Golang安装时会在系统中“植入”一些变量,用于后续的使用,其中需要配置的有GOPATH,GOROOT,还有在系统自带的path变量中加上一些golang目录。
打开环境变量
右键我的电脑,属性,远程设置,高级,环境变量:
然后修改值:
GOPATH是你将要使用的工作目录(自己创建个喜欢的位置)(这里使用了名叫gowork)
注意:GOPATH目录中必须有src,pkg,bin三个子目录,否则无法使用
GOROOT是你安装的目录。
Path中加入两个元素:
这样使用指令行时,这两个目录下的软件就能用了。全局都能使用go指令。
测试
用go env观察变量(由于配置了Path,在任意目录下应该都能使用go指令):
完成
3.第一段代码hello world
GOPATH目录中必须创建3个子目录。src存放原代码,pkg存放包(库),bin存放可执行文件。
一般情况用户只用写src中的代码就行了,pkg和bin系统会自动编译并放入。
代码都要放在自己的文件夹里,所以这里先在src中创建hello文件夹。
在hello文件夹里创建hello.go,并打入代码:
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
在任意目录下(由于配置了GOPATH,任意目录均可)开始编译。
使用go build指令调试,没有返回信息就是代码正确,代码有错会返回错误信息。
这里的hello是目录名,系统会检查hello目录下所有的代码,这里只有hello.go
调试完成后用go install编译。
如果之前的配置正确,会在bin里面生成hello.exe文件。
如果之前在环境变量Path中正确添加添加 GOPATH里面的bin,那么hello指令可以直接使用,用来调用hello.exe
换个目录也能调用hello,你看:
4.创建第一个函数包(库)
在src里再创建一个目录,stringfun,在src/stringfun里创建stringfun.go(也可以叫别的名字,最好与文件夹同名)
打入代码:
package stringfun
func Reverse (s string) string{
r:=[]rune(s)
for i,j:=0,len(r)-1;i<len(r)/2;i,j=i+1,j-1 {
r[i],r[j]=r[j],r[i]
}
return string(r)
}
接下来更改hello.go,用hello.go调用这个函数。
hello.go修改如下:
package main
import (
"fmt"
"stringfun"
)
func main(){
fmt.Println(stringfun.Reverse("hello world"))
}
用go install hello编译
由于hello调用了stringfun,编译hello会自动编译stringfun
输出正确。是倒序。
5.测试
需要调用golang自带的testing包。
在想要测试的代码目录下,创建xxxx_test.go(后面的_test.go不能换)
这里测试stringfun.c中的Reverse函数。创建stringfun_test.go,打入代码:
package stringfun
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
{"", ""},
}
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
}
}
}
然后用go test stringfun来调用测试:
OK没事了。
6.小姐(打错了) 小结
作为一个windows铁粉,需要相信它的强大
在配置好了GOPATH与GOROOT后一切都会变的很简单。我在任意目录打开指令行,都可以使用go指令,因为它总会指向GOPATH指定的目录下。
go install 后接一个目录名,会编译目录中所有的代码,如果代码中用了import调用其他库,就连其他库一起编译。
属于同一个库的所有文件,必须package 同一个库。
可执行文件的头文件是package main。