gvm安装及go版本管理
目录
Github
官方地址
Mac OS X 要求
xcode-select --install
brew update
brew install mercurial
红帽/Centos
sudo yum install curl
sudo yum install git
sudo yum install make
sudo yum install bison
sudo yum install gcc
sudo yum install glibc-devel
多版本管理
Github
gvm安装
brew install mercurial
# 安装 gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
# gvm直接生效
source ~/.gvm/scripts/gvm
# 查看版本
gvm version
环境变量
vim ~/.zshrc
vim ~/.bash_profile
- 添加如下内容
# 配置 Golang 软件包镜像
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
# 下载 Golang 的二进制文件或源码压缩包进行安装
export GO_BINARY_BASE_URL=https://mirrors.aliyun.com/golang/
# 根据软件的实际安装情况来选择性加载 gvm
[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
# 确保 Golang 使用源码编译安装时,不会出错(golang 1.14后需要 )
export GOROOT_BOOTSTRAP=$GOROOT
# 生效配置
source ~/.zshrc
source ~/.bash_profile
官方国内镜像:https://golang.google.cn/dl/
阿里云镜像:https://mirrors.aliyun.com/golang/
中科大镜像:http://mirrors.ustc.edu.cn/golang/
常用命令
# 查看可安装版本
gvm listall
# 查看已安装版本
gvm list
# 安装 Go 版本(1.4>版本,需要加上-B)
gvm install go1.21.2 -B
# 使用指定版本
gvm use go1.21.2
# 设置默认版本
gvm use go1.21.2 --default
# 卸载 Go 版本
gvm uninstall go1.21.2
# 要完全删除 gvm 以及所有已安装的 Go 版本和软件包
gvm implode
安装 Go
gvm install go1.4 -B
gvm use go1.4
# export GOROOT_BOOTSTRAP=$GOROOT
# 安装1.7+版本需要先安装1.4
gvm install go1.17.13 -B
gvm use go1.17.13
# export GOROOT_BOOTSTRAP=$GOROOT
# 安装1.20+版本需要先安装1.17
gvm install go1.21.2 -B
gvm use go1.21.2
# 设置为默认版本
gvm use go1.21.2 --default
- 安装完最新版,不需用到旧版本可以卸载
gvm uninstall go1.4
gvm uninstall go1.17.13
# 查看 Go 版本
go version
# 安装包缓存目录
rm -rf ~/.gvm/archive
Go 环境信息
# 打印 Go 语言环境信息
go env
名称 | 说明 |
---|---|
CGO_ENABLED | 指明cgo工具是否可用的标识。 |
GOARCH | 程序构建环境的目标计算架构。 |
GOBIN | 存放可执行文件的目录的绝对路径。 |
GOCHAR | 程序构建环境的目标计算架构的单字符标识。 |
GOEXE | 可执行文件的后缀。 |
GOHOSTARCH | 程序运行环境的目标计算架构。 |
GOOS | 程序构建环境的目标操作系统。 |
GOHOSTOS | 程序运行环境的目标操作系统。 |
GOPATH | 工作区目录的绝对路径。 |
GORACE | 用于数据竞争检测的相关选项。 |
GOROOT | Go 语言的安装目录的绝对路径。 |
GOTOOLDIR | Go 工具目录的绝对路径。 |
pkgset工具
# 查看当前go版本环境下的pkgset,默认global
gvm pkgset list
# 创建pkgset
gvm pkgset create example
# 切换/使用对应的pkgset,相对应的 GOPATH 也会改变
gvm pkgset use example
代码示例
VS Code 安装Go插件
创建初始化项目
mkdir demo1
cd demo1
# 初始化项目
go mod init demo1
# 创建main.go文件
vim main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, world!")
}
运行应用
# 直接运行
go run main.go
# 编译并运行
go build && ./demo1
web应用
package main
import (
"log"
"net/http"
)
func viewHandler(writer http.ResponseWriter, request *http.Request) {
message := []byte("Hello, World!")
_, err := writer.Write(message)
if err != nil {
log.Fatal(err)
}
}
func main() {
http.HandleFunc("/hello", viewHandler)
err := http.ListenAndServe("localhost:8800", nil)
log.Fatal(err)
}
运行服务
go run main.go
Gin Web 框架
# 创建项目录
mkdir web-service-gin
cd web-service-gin
# 创建一个可以在其中管理依赖项的模块
go mod init example/web-service-gin
代码示例
# 创建main.go文件
vim main.go
- 完整代码
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
// 相簿表示有关唱片相簿的数据
type album struct {
ID string `json:"id"`
Title string `json:"title"`
Artist string `json:"artist"`
Price float64 `json:"price"`
}
// 相簿切片到种子记录相簿数据
var albums = []album{
{ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99},
{ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99},
{ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99},
}
func main() {
router := gin.Default()
router.GET("/albums", getAlbums)
router.GET("/albums/:id", getAlbumByID)
router.POST("/albums", postAlbums)
router.Run("localhost:8080")
}
// getAlbums以JSON形式响应所有相册的列表.
func getAlbums(c *gin.Context) {
c.IndentedJSON(http.StatusOK, albums)
}
// postAlbums从请求正文中接收的JSON添加相册.
func postAlbums(c *gin.Context) {
var newAlbum album
// 调用BindJSON将接收到的JSON绑定到newAlbum.
if err := c.BindJSON(&newAlbum); err != nil {
return
}
// 将新相册添加到切片.
albums = append(albums, newAlbum)
c.IndentedJSON(http.StatusCreated, newAlbum)
}
// getAlbumByID查找ID值与ID匹配的相册参数,然后返回该相册作为响应.
func getAlbumByID(c *gin.Context) {
id := c.Param("id")
// 循环浏览相册列表,查找ID值与参数匹配的相册.
for _, a := range albums {
if a.ID == id {
c.IndentedJSON(http.StatusOK, a)
return
}
}
c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"})
}
运行应用
# 下载并安装指定的包及其依赖
go get .
# 编译并运行
go run .
# 或
go run main.go
curl http://localhost:8080/albums \
--header "Content-Type: application/json" \
--request "GET"
本文作者:逢生博客
本文链接:https://www.cnblogs.com/wufengsheng/p/17755310.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步