目录
1、Linux平台安装Go
1)安装Go的安装包
$ wget https://golang.google.cn/dl/go1.18.3.linux-amd64.tar.gz
$ tar -xzvf go1.18.3.linux-amd64.tar.gz
$ mv go /usr/local/
2)设置环境变量
# 安装目录
export GOROOT=/usr/local/go
# 代码目录
export GOPATH=~/code export
PATH=$PATH:$GOPATH:$GOROOT/bin
$ go version
go version go1.18.3 linux/amd64
# 看到这个就说明安装成功了
2、Windows平台安装Go
- 下载:
- 下载路径:https://golang.google.cn/dl/go1.18.3.windows-amd64.msi
- 安装msi文件
- 将安装路径添加到环境变量 :
- 如:go安装到 C:\Program Files\Go 目录(这里你可以自定义选择安装路径),则添加环境变量GOPATH: C:\Program Files\Go\ 并将 %GOPATH%\bin 添加到PATH
系统默认生成了GOPATH的情况,就新建一个GOROOT(安装路径);默认生成的GOPATH改为你想要存的代码目录。
- 检查
- 打开cmd命令行,输入: go version。若是结果如下图所示,那么就表示安装成功了
3、IDE安装(Linux平台Vim配置)
git clone https://github.com/lexkong/lexVim
2、进入 lexVim 目录,下载 go ide 需要的二进制文件
$ cd lexVim
$ git clone https://github.com/lexkong/vim-go-ide-bin
# 都是二进制文件,大概有 141MB,请耐心等待 :-)
3、启动安装脚本
$ ./start_vim.sh
####启动后,会进入一个交互环境,依次输入: 1 -> yourname -> youremail@qq.com ,脚本最后输出this vim config is success ! 说明安装成功。很简单,只需 3 个选择即可安装成功。
启动成功的画面就是这个啦,然后你就按照前面的步骤操作,就会得到安装成功的英文。
3.1、可能会出现的错误
错误一:
这个时候只需要输入"chmod +x start_vim.sh"这个命令,然后再执行图中这个命令就能够执行成功了。或者咱们可以使用"bash start_vim.sh"的执行方式。
错误二:
出现这个问题的可能原因是因为我们直接从windows里拿去这个文件的安装包导致的。所以我们需要安装dos2unix来解决问题。
$ yum install dos2unix -y
$ dos2unix start_vim.sh
再运行用dos2unix转化之后的文件,那么就会得到上面的结果。
3.2、Vim IDE常用功能
在Go项目开发中最常用的功能是(!!必会!!):
- gd 或者 ctrl + ] 跳转到对应的函数定义处 => 如果没有反应请等待一下,可能慢
- ctrl + o 跳转到前一个位置
- <F1> 打开帮助, :q 退出
- <F2> 打开目录窗口,再按会关闭目录窗口
- <F4> 最近文件列表, :q 退出
- <F6> 添加函数注释
其他:
- <F3> 展示tag,再按会关闭tag窗口
- <F5> 在 Vim 的上面打开文件查找窗口, :q 退出
- ctrl + t 标签退栈
- <F9> 生成供函数跳转的 tag
在代码间跳来跳去,将光标放在某个函数调用上,按 ctl + ] 就会跳到函数的定义处,按 ctrl + o 就会跳回来。退出某模式的窗口,使用末行模式 :q 即可注意:在 vim 中粘贴文本,需要 :set paste 就能正常粘贴好了!更多 Go vim ide 功能请参考 Vim IDE 功能。
4、Windows平台Goland安装
5、测试工具安装
安装curl
$ yum install curl
使用方法:https://www.ruanyifeng.com/blog/2011/09/curl.htmlhttps://www.ruanyifeng.com/blog/2019/09/curl-reference.html
6、第一个Go程序
新建一个文件 ~/code/example.go ,写入
[root@fttswlp src]# cat example.go
// 声明该文件所在包,如果是主程序就是main
package main
// 导入库,fmt用来处理标准输入和输出
import "fmt"
// main函数是整个程序的入口,main函数所在的包名也必须为"main"
func main() {
fmt.Println("hello world!")
}
解读这个程序:
package main
声明了 main.go 所在的包, Go 语言中使用包来组织代码。一般一个文件夹即一个包,包内可以暴露类型或方法供其他包使用。import "fmt"fmt 是 Go 语言的一个标准库 / 包,用来处理标准输入输出。详细用法:标准库-fmt库的用法
func main
main 函数是整个程序的入口, main 函数所在的包名也必须为 main 。!!主包中必须包含一个 main 函数!!fmt.Println(“Hello World!”)调用 fmt 包的 Println 方法,打印出 “Hello World!”其他知识点:
- 一行代表一个语句结束,多个语句写在同一行,它们则必须使用 ; 人为区分
- 注释:
- 单行注释: //
- 多行注释:/* sth */
- 标识符:同python标识符规则
6.1、运行代码
直接运行
// 执行代码
[root@fttswlp src]# go run example.go
hello world!
// 如果强制启用了 Go Modules 机制,即环境变量中设置了 GO111MODULE=on,则需要先初始化模块 go mod init hello 否则会报错误:go: cannot find main module; see ‘go help modules’
先编译再执行
#先编译成二进制可执行程序,build后,你会发现在同目录下会生成一个同名的可执行文件(无扩展名)
[root@fttswlp src]# go build example.go
# 执行该程序
[root@fttswlp src]# ./example
hello world!
7、Go常用命令
汇总
go version: 获取Go版本
go env: 查看Go环境变量
go help: 查看Go帮助命令
go get: 获取远程包(需提前安装git或hg)
go build: 编译并生成可执行程序
go run: 直接运行程序
go fmt: 格式化源码
go install: 编译包文件以及整个程序
go test: go原生提供的单元测试命令
go clean: 移除当前源码包和关联源码包里编译生成的文件
go tool: 升级Go版本时,修复旧版代码
godoc -http:80:开启一个本地80端口的web文档 gdb 可执行程序名:调试Go编译出来的文件
使用格式:
go command [arguments]
7.1、go build
// 编译当前目录为一个可执行文件
go build
// 编译当前目录为一个可执行文件
go build .
// 编译hello.go文件为一个可执行文件
go build hello.go
$ go build example.go
$ ./example
Hello World!
7.1.1、可能出现的错误
/usr/lib/go-1.10/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-008006128/000026.o: In function _cgo_05dc84caff82_Cfunc_sysconf':
/tmp/go-build/cgo-gcc-prolog:32: multiple definition of_cgo_05dc84caff82_Cfunc_sysconf’
/tmp/go-link-008006128/000024.o:/tmp/go-build/cgo-gcc-prolog:32: first defined here collect2: error: ld returned 1 exit status
解决办法
linux: export CGO_ENABLED=0
windows : cmd: set CGO_ENABLED=0
windows : powershell:$env:CGO_ENABLED=0
7.2、go run
go build 是先编译,然后我们在执行可以执行文件来运行我们的程序,需要两步。
go run 这个命令就是可以把这两步合成一步的命令,节省了我们录入的时间
命令格式:
go run 文件名.go
示例:
$ go run example.go
Hello World!
7.3、go install
go install 命令和 go build 类似,用来生成项目的可执行文件。不过它可以在编译后,把生成的执行文件或者库安装到对应的目录下,以供使用。
- 可执行文件安装到: $GOPATH/bin/
- 可引用库安装到: $GOPATH/pkg/
- 注意: 没有开启go mod时,使用上述命令需要配置GOPATH,否则会报:no install location。
7.4、go get
go get用来获取远程仓库中的包,使用该命令前必须配置GOPATH,而且依据不同的源码网站,还要安装不同的版本管理工具,比如从github上使用go get需要额外安装git。
go get本质上可以理解为通过源码工具clone下代码后,执行了go install。
- 命令格式:
- 下载包:添加 -u 参数可以自动更新包和依赖
go get github.com/**/**
- 使用安装的包
import "github.com/****/****"
- 如果下载慢,记得配置goproxy
# 设置module管理模式
$ go env -w GO111MODULE=on
# 设置下载源
$ go env -w GOPROXY=https://goproxy.cn
7.5、 go fmt
go fmt命令可以格式化代码文件
使用go fmt命令,其实是调用了gofmt,而且需要参数-w,否则格式化结果不会写入文件
- 命令格式
go fmt -w 文件名.go
- 示例:格式化整个项目
gofmt -w -l src
- 常见参数
-l: 显示那些需要格式化的文件
-w: 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。
-r: 添加形如"a[b:len(a)] -> a[b:]"的重写规则,方便我们做批量替换
-s: 简化文件中的代码
-d: 显示格式化前后的diff而不是写入文件,默认是false
-e: 打印语法错误到标准输出。无此参数只会打印不同行的前10个错误。
7.6、go tool
go tool下聚集了很多命令,主要有2个,即fifix和vet:
go tool fix .:用来修复以前老版本的代码到新版本
go tool vet directory|files:分析当前目录的代码是否正确
8、Go语言fmt包的用法
介绍:
fmt是一个用于输入输出常用的库,更多方法可以参考:官方网站
在 fmt 包,有关格式化输入输出的方法就两大类: Scan 和 Print ,分别在scan.go 和 print.go 文件中
8.1、Print,输出函数
-
print :直接输出内容, 不会换行 ,不能格式化输出。
-
printf: 按照指定格式化文本输出内容。
-
println:能够在输出内容后面 加上换行符 。
[root@fttswlp src]# go run b.go
hello Println
helloPrintlnHello Printf AAA
[root@fttswlp src]# cat b.go
package main
import "fmt"
func main() {
// 一次性输入多个值的时候,Printlt中间有空格,能自动换行
fmt.Println("hello","Println")
// 一次性输入多个值的时候,Print中没有空格,Print不会自动换行
fmt.Print("hello","Println")
// Printf 是格式化输出,在很多场景下比 Println 更方便,Printf也不会换行
fmt.Printf("Hello Printf %s", "AAA")
}
8.2、九个打印函数
这9个函数,按照两个维度功能可以按两个维度来划分
- 如果把 Print 理解为核心关键字,那么后面跟的后缀有" f "和" ln "以及"",着重的是输出内容的最终结果;如果后缀是" f ", 则指定了format 如果后缀是" ln ", 则有换行符
Println、Fprintln、Sprintln 输出内容时会加上换行符;
Print、Fprint、Sprint 输出内容时不加上换行符;
Printf、Fprintf、Sprintf 按照指定格式化文本输出内容。
-
如果把 Print 理解为核心关键字,那么前面的前缀有 " F " 和 " S " 以及 "" ,着重的是输出内容的目标(终端);如果前缀是" F ", 则指定了 io.Writer 如果前缀是 " S ", 则是输出到字符串
Print、Printf、Println 输出内容到标准输出os.Stdout;
Fprint、Fprintf、Fprintln 输出内容到指定的io.Writer;
Sprint、Sprintf、Sprintln 输出内容到字符串。
8.3、Scan,输入函数
scan系列主要用于输入 ,例在交互式界面中获取用户输入
[root@fttswlp src]# cat scan.go
package main
import "fmt"
func main() {
var name string
fmt.Print("输入你的姓名:")
fmt.Scan(&name)
fmt.Printf("你输入的姓名是:%s", name)
fmt.Println()
}
[root@fttswlp src]# go run scan.go
输入你的姓名:fyy
你输入的姓名是:fyy
# 值得注意的是,Scan后面需要使用&,否则会被视为直接传参进去
9、Go多版本与包管理
Go的三种包管理
补充:go module模式下,代码除了不能放在code目录下面,其他的任意目录都可以存放
RESTful API介绍
RESTful RUI的设计
HTTP动词
对于资源的具体操作类型,由HTTP动词表示。
常见的HTTP动词有以下四个(括号里是对应的SQL命令)
还有三个不常用的HTTP动词
示例
过滤信息
状态码
服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)
较重要的一些信号:2开头的也很重要,401、403 、404
返回结果以及错误处理(Error handling)