Mac下golang环境安装以及新手入门
环境安装
mac 环境 首先安装brew
brew install go
执行完命令后,如下显示:
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/services).
No changes to formulae.
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/go-1.11.2.m
######################################################################## 100.0%
==> Pouring go-1.11.2.mojave.bottle.tar.gz
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall go`
==> Caveats
A valid GOPATH is required to use the `go get` command.
If $GOPATH is not specified, $HOME/go will be used by default:
https://golang.org/doc/code.html#GOPATH
You may wish to add the GOROOT-based install location to your PATH:
export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
🍺 /usr/local/Cellar/go/1.11.2: 9,282 files, 404MB
需要设置GOPATH和GOROOT的环境变量,以及设置PATH.
环境变量配置
通过go env查看go的详细信息
go env
需要设置的环境变量包括:GOPATH ,GOBIN 以及把GOBIN加入到PATH中,GOROOT变量默认已经设置好。
如果需要修改默认的环境变量配置修改 vim ~/.bash_profile 或者 vim ~/.zshrc
#GOROOT
# CentOS 中如下设置 GOROOT,看你安装的路径
# export GOROOT=/usr/local/go
# Mac OS 中通过命令行工具brew安装如下配置 GOROOT
export GOROOT=/usr/local/opt/go/libexec
#GOPATH root bin
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
#GOPATH
#export GOPATH=$HOME/go
export GOPATH=/Users/wxq/go
#GOPATH bin
export PATH=$PATH:$GOPATH/bin
export GOPROXY=https://goproxy.io
使其立即生效
source ~/.bash_profile
然后在执行 go env的时候配置就会生效
环境变量设置完成!
标准命令详解
go --help
Go is a tool for managing Go source code.
Go是用于管理Go源代码的工具。
Usage用法:
go command [arguments]
The commands are:
build 命令用于编译我们指定的源码文件或代码包以及它们的依赖包。
-o 指定输出的文件名,可以带上路径,例如 go build -o a/b/c
-i 安装相应的包,编译+go install
-a 更新全部已经是最新的包的,但是对标准包不适用
-n 把需要执行的编译命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
-p n 指定可以并行可运行的编译数目,默认是CPU数目
-race 开启编译的时候自动检测数据竞争的情况,目前只支持64位的机器
-v 打印出来我们正在编译的包名
-work 打印出来编译时候的临时文件夹名称,并且如果已经存在的话就不要删除
-x 打印出来执行的命令,其实就是和-n的结果类似,只是这个会执行
-ccflags 'arg list' 传递参数给5c, 6c, 8c 调用
-compiler name 指定相应的编译器,gccgo还是gc
-gccgoflags 'arg list' 传递参数给gccgo编译连接调用
-gcflags 'arg list' 传递参数给5g, 6g, 8g 调用
-installsuffix suffix 为了和默认的安装包区别开来,采用这个前缀来重新安装那些依赖的包,-race的时候默认已经是-installsuffix race,大家可以通过-n命令来验证
-ldflags 'flag list' 传递参数给5l, 6l, 8l 调用
-tags 'tag list' 设置在编译的时候可以适配的那些tag,详细的tag限制参考里面的http://golang.org/pkg/go/build/
clean 删除掉执行其它命令时产生的一些文件和目录。
-i 清除关联的安装的包和可运行文件,也就是通过go install安装的文件
-n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
-r 循环的清除在import中引入的包
-x 打印出来执行的详细命令,其实就是-n打印的执行版本
doc 命令可以打印附于Go语言程序实体上的文档。
env 用于打印Go语言的环境信息。
bug 启动错误报告。
fix 把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。
fmt 在包源上运行gofmt。
-l 显示那些需要格式化的文件
-w 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。
-r 添加形如“a[b:len(a)] -> a[b:]”的重写规则,方便我们做批量替换
-s 简化文件中的代码
-d 显示格式化前后的diff而不是写入文件,默认是false
-e 打印所有的语法错误到标准输出。如果不使用此标记,则只会打印不同行的前10个错误。
-cpuprofile 支持调试模式,写入相应的cpufile到指定的文件
generate 通过处理源生成Go文件。
get 下载或更新安装指定的代码包及其依赖包,并对它们进行编译和安装。
-d 只下载不安装
-f 只有在你包含了-u参数的时候才有效,不让-u去验证import中的每一个都已经获取了,这对于本地fork的包特别有用
-fix 在获取源码之后先运行fix,然后再去做其他的事情
-t 同时也下载需要为运行测试所需要的包
-u 强制使用网络去更新包和它的依赖包
-v 显示执行的命令
install 用于编译并安装指定的代码包及它们的依赖包。
list 列出指定的代码包的信息。
run 命令可以编译并运行命令源码文件。
test 对Go语言编写的程序进行测试。
-bench regexp 执行相应的benchmarks,例如 -bench=.
-cover 开启测试覆盖率
-run regexp 只运行regexp匹配的函数,例如 -run=Array 那么就执行包含有Array开头的函数
-v 显示测试的详细命令
tool 运行指定的go工具
go tool fix . 用来修复以前老版本的代码到新版本,例如go1之前老版本的代码转化到go1,例如API的变化
go tool vet directory|files 用来分析当前目录的代码是否都是正确的代码,例如是不是调用fmt.Printf里面的参数不正确,例如函数里面提前return了然后出现了无用代码之类的。
version 打印Go的版本信息
vet 用于检查Go语言源码中静态错误的简单工具。
Use "go help [command]" for more information about a command.
Additional help topics:
c calling between Go and C
buildmode description of build modes
filetype file types
gopath GOPATH environment variable
environment environment variables
importpath import path syntax
packages description of package lists
testflag description of testing flags
testfunc description of testing functions
Use "go help [topic]" for more information about that topic.
运行Go
我们先写一段GO代码,很简单就是打印输出一个hello world!, 保存为hello.go文件
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
通过go命令运行
命令运行go程序,在hello.go这个当前目录下运行下面命令,可以输出hello world!。
go run hello.go
通过go命令编译运行
GO程序的代码是可以直接编译成exe文件 或者 二进制文件直接运行,在hello.go目录下运行下面命令,即可把go程序编译成二进制文件
go build hello.go
上面命令文件可以编译成一个hello可执行文件,然后直接在当前目录下 ./hello 运行,可以输出hello world!。
go的基本知识
注释
注释不会被编译,每一个包应该有相关注释。
单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。
多行注释也叫块注释,均已以 / 开头,并以 / 结尾。如:
// 单行注释
/*
hello WXiangQian
我是多行注释
*/
字符串连接
Go 语言的字符串可以通过 ➕ 实现:
package main
import "fmt"
func main() {
fmt.Println("hello" + "WXiangQian")
}
常见的基本错误
- { 写法
需要注意的是 { 不能单独放在一行,所以以下代码在运行时会产生错误:
package main import "fmt" func main() { // 错误,{ 不能在单独的行上 fmt.Println("Hello, World!") }
- 多余的 Imports
Go编译器对Go程序非常严格,如果你不使用,就不要有多余的请求。在上面的代码中,试图引入os包,但是在代码当中,并没有使用,Go编译器对这样的行为严厉禁止。去掉第四行代码之后,程序就能正确编译运行。
- 命名区分大小写
上述代码中,打印函数写的是fmt.println不是之前所写的fmt.Println。Go语言区分大小写,所以在编程时,要严格按照定义的方式进行引用和调用。
尤其注意Println的l不是i的大写I!!!!!(ps:多次因为写成PrintIn而被报错,虽然有点白痴,但是请注意!
分号分行
如果你学过C、C++、Java、Perl等等,应该已经注意到Go(至少在前面的代码中)没有要求在语句的末尾添加分号。其实在Go语言中,会自动在一行的末尾添加分号。然而,如果在一样有两条表达式,需要用分号显示的进行分割。
无效的分号
在import后面不可以同时加入两个;第二个分号之前没有任何有效的表达式,所以编译器报了prog.go:3: empty top-level declaration错误。去掉多余的分号,程序可正确运行。
golang学习仓库地址
https://github.com/WXiangQian/go-study
你的支持就是我更新的动力👍!!!