当前位置:网站首页>Golang(1)|从环境准备到快速上手
Golang(1)|从环境准备到快速上手
2022-07-05 21:04:00 【小朱撕码迹】
前言
本专栏
将零基础教大家如何来实现一个采用 REST 风格+JSON构建的 API 服务器
,这是 Go API 开发中很常用的组合,这种模式能满足绝大多数的需求场景。通过实战展示了 API 构建过程中各个流程(准备 -> 设计 -> 开发 -> 测试
[可选] -> 部署)的实现方法。
大纲展示
GO语言的基本介绍
Go语言的特点
Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言: Go = C + Python
, 说明Go语言既有C静态语言程序的运行速度
,又能达到Python动态语言的快速开发
。Go语言有以下
特性:
- 自动垃圾回收: C/C++最头疼的就是指针问题,一不小心就野指针了或者又越界了。在Go语言里再也不用担心,也不用考虑delete或 者free,
系统自动会回收
。 - 函数可以返回多个值: 这个很神奇,大多数语言只能返回一个值,
Go语言可以返回多个值
。这个功能使得开发者再不用绞尽脑汁的想到底怎么返回值的设计,也不用为了传值专门定义一个结构体。 - 并发编程: Go语言天然并发,只需要关键字“go”就可以
让函数并发执行
,使得并发编程变得更为简单,这也是Go语言最大的优势。 - 没有依赖地狱, 甚至是glibc
- 编译一次,随处拷贝,部署极为方便: 不用像python项目一样要安装所需要的依赖,GO项目的部署简便、快捷!
GO语言开发环境配置
Go的安装
Go 有多种安装方式,如:Go 源码安装、Go 标准包安装、第三方工具(yum、apt-get 等)安装
两个环境变量的介绍:
GOROOT:GOROOT 就是 Go 的安装路径
GOPATH:GOPATH 是作为编译后二进制的存放目的地 和 import 包的搜索路径(其实也是你的工作目录,存放GO文件的路径
)
GOPATH详解
go_code // (例go_code为GOPATH目录)
-- bin // golang编译可执行文件存放路径,可自动生成。
-- pkg // golang编译的*.a中间文件存放路径,可自动生成。
-- src // go源码路径。按照golang默认约定,go run,go install等命令的当前工作路径(即在此路 径下执行上述命令)
Linux下安装GO
- 获取安装压缩包
$ yum install wget -y
$ 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/
- 设置环境变量
在
~/.bashrc
中添加 GOPATH 变量
# 安装目录
export GOROOT=/usr/local/go
# 代码目录
export GOPATH=~/code
export PATH=$PATH:$GOPATH:$GOROOT/bin
# 注意:如果之前安装过想选用最新版本
export PATH=$PATH:$GOROOT/bin:$GOPATH
添加完成后,保存文件,并执行
source ~/.bashrc
- 测试是否安装成功
$ go version
go version go1.18.3 linux/amd64
看到 go version 命令输出 go 版本号 go1.10.2 linux/amd64 ,说明 go 命令安装成功。
Mac平台安装GO
$ brew install go
$ go version
go version go1.18.3 darwin/amd64
Windows平台安装GO
下载
下载路径:https://golang.google.cn/dl/go1.18.3.windows-amd64.msi安装msi文件
将安装路径添加到环境变量中
如:go安装到 D:\GO_APP
添加环境变量GOPATH (代码存放目录)==》D:\GO_code
添加环境变量GOROOT(软件安装目录) ==》 D:\GO_APP
并添加%GOPATH%\bin
到PATH
并添加%GOROOT%\bin
到PATH
- 查看是否安装成功
打开 cmd 命令行,输入go version
IDE的安装
Linux平台Vim配置: Vim 是 Linux 下开发的最基本工具,可以配置一个 Vim IDE。我们可以使用开源的安装工具,这里直接用该工具实现一键配置,具体配置步骤如下:
- 下载Vim配置工具
$ yum install git -y #安装软件等最好进入/tmp下进行安装
$ git clone https://github.com/lexkong/lexVim
- 进入lexVim目录,下载 go ide 需要的二进制文件
$ cd lexVim
$ git clone https://github.com/lexkong/vim-go-ide-bin
都是二进制文件,文件比较大,请耐心等待!
- 启动安装脚本
$ ./start_vim.sh
启动后,会进入一个交互环境,依次输入: 1 ==> 用户名 ==》 邮箱(可以任意输入)。脚本最后输出 this vim config is success ! 说明安装成功。很简单,只需 3 个选择即可安装成功,配置 IDE so easy。
如果安装包下载过慢,可私信找我要压缩包哦
## 解压zip压缩包
# 安装zip
yum install unzip -y
# 解压zip文件
unzip start_vim.sh
## 遇到Windows上的文件在Linux上运行出现格式报错
[[email protected] lexVim]# sh start_vim.sh
start_vim.sh:行9: $'\r': 未找到命令
start_vim.sh:行11: $'\r': 未找到命令
start_vim.sh:行12: 未预期的符号 `$'\r'' 附近有语法错误 'tart_vim.sh:行12: `function prompt()
#解决办法
yum install dos2unix
#转换
dos2unix start_vim.sh
Vim IDE常用功能
- 跳转到源代码:ctrl+] 或 gd
- 跳出源代码:ctrl+o
- 跳转到末尾:shift+G
- 删除全部:d+gg
- 删除一行:d
- < F1> 打开帮助, :q 退出
- < F2> 打开目录窗口,再按会关闭目录窗口
- < F4> 最近文件列表, :q 退出
- < F6> 添加函数注释
- 在vim中粘贴文本,需要
:set paste
就能正常粘贴
测试工具安装
Linux平台Curl工具
$ yum install curl
使用方法:
https://www.ruanyifeng.com/blog/2011/09/curl.html
https://www.ruanyifeng.com/blog/2019/09/curl-reference.html
Windows平台 APIPOST安装
下载地址:https://www.apipost.cn/?utm_source=10039&bd_vid=10756414022759907776
GO语言快速上手
- 创建一个 .go 的文件
// 声明该文件所在包,如果是主程序就是main
package main
// 导入库,fmt用来处理标准输入输出
import "fmt"
// main 函数是整个程序的入口,main 函数所在的包名也必须为`main`
func main() {
// 调用fmt包的Println方法,在屏幕输出信息
fmt.Println("Hello World!")
}
注意:
单行注释: //
多行注释:/* sth */
- 运行代码
直接运行
$ go run first.go
Hello World!
先编译在执行
$ go build first.go
$ ./first
- GO语言的配置
Go是一门编译型语言,Go语言的工具链将源代码及其依赖转换成计算机的机器指令(译注:静态编译)
# 设置module管理模式
$ go env -w GO111MODULE=on
# 设置下载源
$ go env -w GOPROXY=https://goproxy.cn
## 中国最可靠的 Go 模块代理:https://goproxy.cn
#修改env
## echo "export GOPROXY=https://goproxy.cn" >> ~/.profile && source ~/.profile
尝试部署GO项目
- 编写代码
package main
import (
"fmt"
"github.com/jinzhu/configor"
)
func main() {
fmt.Println("vim-go",configor.Config{
})
}
- 初始化项目:主要解决包管理依赖问题
# 初始化
go mod init account
# 解决依赖问题(检查,删除错误或者不使用的modules,下载没download的package)
go mod tidy
- 运行
# go run proj.go
vim-go {
false false false false 0s <nil> false}
GO语言多版本与包管理
go module
GOMODULE 模式下:
- 所有依赖的包存放在 GOPATH/pkg/mod 目录下
- 所有第三方二进制可执行文件放在 GOPATH/bin 目录下
- 工程项目可以放在 GOPATH 路径之外
- 要求项目中需要有 go.mod 文件(该文件通过 go mod init 命令初始化可以生成)
GOMODULE 模式和 GOPATH 模式一样都指定了依赖包存放的位置,区别在于GOMODULE的 go.mod 文件中记录了所依赖包的具体版本,既实现了工程之间重用依赖包,且解决了 GOPATH 模式下不同工程无法依赖同一个包的不同版本的
问题
1.使用GO MODULE模式,需要先开启配置
$ export GO111MODULE=on
或
$ go env -w GO111MODULE=on
注意:开启模块支持后,并不能与GOPATH共存,所以项目不能放在GOPATH目录下!!
关于 GO111MODULE 有兴趣的可以参考这篇文章:文章链接
go mod 命令的使用
# 初始化工作目录 -> 生成go.mod文件
$ go mod init code
$ go mod tidy
# 下载gin,下载到pkg目录
$ go get github.com/gin-gonic/gin
常用命令
$ go get golang.org/x/tools/cmd/guru
$ go build golang.org/x/tools/cmd/guru
$ mv guru $(go env GOROOT)/bin
标准库-fmt库
fmt是一个用于输入输出常用的库,可以参考官网:GO中文官网
在 fmt 包,有关格式化输入输出的方法就两大类: Scan (输入函数)和 Print (输出函数),分别在scan.go 和 print.go 文件中
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语言常见报错汇总
遇到Windows上的文件在Linux上运行出现格式报错
[[email protected] lexVim]# sh start_vim.sh
start_vim.sh:行9: $'\r': 未找到命令
start_vim.sh:行11: $'\r': 未找到命令
start_vim.sh:行12: 未预期的符号 `$'\r'' 附近有语法错误 'tart_vim.sh:行12: `function prompt()
#下载工具
yum install dos2unix
#转换
dos2unix zjh.sh
#添加可执行权限
chmod -x 文件名
./文件名 #可以执行了(不要后缀)
获取GO包时报错
[[email protected] code]# go get golang.org/x/tools/cmd/guru
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/[email protected]'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
## 解决方法
go mod init mycode #把目录初始化mod模式的目录
环境变量GOPROXY的修改(主要解决下载过慢的问题)
echo "export GOPROXY=https://goproxy.cn" >> ~/.profile && source ~/.profile
# https://goproxy.cn 是中国最可靠的 Go 模块代理
执行 go mod tidy 时报错
出现go mod tidy报"all" matched no packages原因为go.mod和执行go mod tidy目录不在一个目录
[[email protected] proj01]# go mod tidy #帮我安装所用到的依赖包
go: warning: "all" matched no packages
导入了包就要使用,不使用就会报错!!
[[email protected] proj01]# go run proj.go
# command-line-arguments
./proj.go:6:2: imported and not used: "github.com/gin-gonic/gin"
输入 ctrl+] 无法跳转到源代码
$ go get golang.org/x/tools/cmd/guru
$ go build golang.org/x/tools/cmd/guru
$ mv guru $(go env GOROOT)/bin
边栏推荐
- Monorepo management methodology and dependency security
- How to make ERP inventory accounts of chemical enterprises more accurate
- 最长摆动序列[贪心练习]
- 基于flask写一个接口
- 学习机器人无从下手?带你体会当下机器人热门研究方向有哪些
- 研学旅游实践教育的开展助力文旅产业发展
- Influence of oscilloscope probe on measurement bandwidth
- ODPS 下一个map / reduce 准备
- Careercup its 1.8 serial shift includes problems
- Material design component - use bottomsheet to show extended content (II)
猜你喜欢
MySQL InnoDB架构原理
示波器探头对测量带宽的影响
Abnova fluorescent dye 620-m streptavidin scheme
【案例】元素的显示与隐藏的运用--元素遮罩
研学旅游实践教育的开展助力文旅产业发展
MySQL fully parses json/ arrays
基於flask寫一個接口
Cutting edge technology for cultivating robot education creativity
ClickHouse 复制粘贴多行sql语句报错
Talk about my fate with some programming languages
随机推荐
hdu2377Bus Pass(构建更复杂的图+spfa)
Is Kai Niu 2980 useful? Is it safe to open an account
Write an interface based on flask
Clion-MinGW编译后的exe文件添加ico图标
Dictionary tree simple introductory question (actually blue question?)
MySQL deep paging optimization with tens of millions of data, and online failure is rejected!
Learning notes of SAS programming and data mining business case 19
Establishment of terminal security capability verification environment and penetration test records
Web Service简单入门示例
Cutting edge technology for cultivating robot education creativity
Écrire une interface basée sur flask
教你自己训练的pytorch模型转caffe(三)
Duchefa cytokinin dihydrozeatin (DHZ) instructions
Implementation of redis unique ID generator
vant 源码解析 之深层 合并对象 深拷贝
基於flask寫一個接口
获取前一天的js(时间戳转换)
Which securities company is better and which platform is safer for stock account opening
Pytorch实战——MNIST数据集手写数字识别
MySQL ifnull usage function