Go语言学习笔记

Scroll Down

go语言学习笔记

GOROOT & GOPATH

一般情况下go的目录机构是由bin,src,pkg三个文件夹组成,src文件夹用来保存项目代码,bin存放编译后的可执行文件,pkg目录下会保存一些下载下来的依赖。一般情况下bin和pkg不需要我们手动创建都是go在编译后自动生成的

在go中一般会先去GOROOT去寻找对应的依赖包,找不到的情况下会去GOPATH目录下去寻找,也就是说我们项目中的一些包go一般都会在GOPATH下面去寻找,因为GOROOT一般情况下肯定只有go原生的包,我们项目中的业务包肯定不在其中。

GOROOT

GOROOT就是Go的安装目录(类似于java的JDK),一般不需要修改。GOROOT目录下的bin目录下有我们熟悉使用的go和gofmt功能,可以理解为GOROOT类似于java里的JDK目录

GOPATH

GOPATH是开发时候的工作目录,作用一般是用于

  1. 保存编译后的二进制文件
  2. go get和go install命令下载的依赖会保存到GOPATH中
  3. import包时的搜索路径
    (其实根据博主的使用经验感觉GOPATH更类似于之前eclipse中的workspace或者idea中的项目目录)

go编译和执行

go build

go通过go build命令来编译文件,在执行go build命令之后,go会编译出来一个可以运行的可执行文件,但是go build不会去执行这个可执行文件。 注意:go build 命令只有在执行出错的情况下才会有返回信息,执行成功的话是没有返回信息的,但是会在当前目录生成一个与 main 包文件同名的可执行文件。
go build命令

go build filename

参考一个例子,在当前目录下有一个简单的go项目,里面有一个go的main包下的文件hello.go,在没有执行go build hello.go之前,没有可执行文件,在执行build命令后,go会帮助我们生成一个可执行文件hello(如果是window会出现hello.exe)

qujianfei@troyMac  ~/gitProject/go_local/local-go-module  ls
channel  clazz    go.mod   hello.go
qujianfei@troyMac  ~/gitProject/go_local/local-go-module  go build hello.go
qujianfei@troyMac  ~/gitProject/go_local/local-go-module  ls
channel  clazz    go.mod   hello    hello.go
qujianfei@troyMac  ~/gitProject/go_local/local-go-module  

go run

go也提供了可以直接编译并且编译成功后直接运行的命令go run,语法和go build一样,直接通过go run filename.go就可以编译并且执行编译过后的可执行文件

go并发

go语言并发是基于goroutine来实现的,goroutine 类似于线程,但并非线程。可以将 goroutine 理解为一种虚拟线程。Go语言运行时会参与调度 goroutine,并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用 CPU 性能。

多个goroutine之间可以通过通道(channle)进行通讯,通道是一种内置数据结构,可以让用户在不同的 goroutine 之间同步发送具有类型的消息。这让编程模型更倾向于在 goroutine 之间发送消息,而不是让多个 goroutine 争夺同一个数据的使用权(区别于Java的线程)。