0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何快速搭建一个现代化的Go开发环境?

冬至子 来源:洋芋土豆 作者:真没什么深度 2023-05-22 16:53 次阅读

基础环境变量

GOROOT

Go 源代码的安装目录,MacWindows 安装时会自动配置好,Linux 一般在 /usr/local/go 目录。

# 查看 $GOROOT 目录
$ echo $GOROOT
/usr/local/bin

# 设置 $GOROOT 目录
$ export GOROOT=/usr/local/bin

# 增加 go 相关命令到 PATH
$ export PATH=$PATH:/usr/local/go/bin

GOPATH

简单来说,就是存放 Go 第三方库的源代码以及构建后可执行程序的目录,建议设置为独立的目录并且不要存放其他文件。

# 查看 $GOPATH 目录
$ echo $GOPATH
/home/codes/go

# 设置 $GOPATH 目录
$ export GOPATH=/home/codes/go

GOPROXY

安装包的下载代理地址,直接使用 七牛云 提供的代理地址 ,速度非常快!

# 查看 $GOPROXY 代理地址 
$ echo $GOPROXY
https://goproxy.cn

# 设置 $GOPROXY 目录
$ export GOPROXY=https://goproxy.cn

GO111MODULE

是否开启了 gomod, 必须开启才可以使用 Go Module

# 查看 $GO111MODULE 模块开启情况 
$ echo $GO111MODULE
on

# 设置 $GOPROXY 目录
$ export GO111MODULE="on"

建议将刚才的配置写入 ~/.bashrc 或者 ~/.zshrc 文件,永久有效。 到这里,我们第一步设置基础环境变量的工作就完成了,可以验证一下设置是否成功:

$ go env | grep -i -E "root|path|goproxy|module"
GO111MODULE="on"
GOPATH="/home/codes/go"
GOPROXY="https://goproxy.cn"
GOROOT="/usr/local/go"

通过输出结果可以看到,刚才的配置已经全部完成。

Go 命令方法

env 命令除了查看环境变量外,同样可以设置环境变量。

# 通过 go env 命令设置代理环境变量
$ go env -w GOPROXY=https://goproxy.cn,direct

Modules

Go 从 1.12 版本开始,默认支持 Go Modules, 从此彻底告别配置 GOPATH 以及包下载及依赖导致的各种奇葩问题。

初始化一个包

这里假设项目名称为 HelloWorld

  • • 新建项目的目录,比如 /home/codes/projects/HelloWorld
  • • 切换到 /home/codes/projects/HelloWorld 目录
  • • 执行命令 go mod init helloworld
# 输出如下
go: creating new go.mod: module helloworld
go: to add module requirements and sums:
go mod tidy
  • • 这时可以看到目录下多了一个 go.mod 文件,其中内容如下
$ cat go.mod
module helloworld

go 1.19  # 版本号可能和你的不一样

安装依赖

Go 的包名定义非常简单,就是一个普通的 URL (以域名打头),可以是主流的代码仓库地址,也可以是自己搭建的代码仓库。下面的例子统一以 Github 演示。

# 语法规则: 其中版本号可以是 git 分支或 tag
go get 包名@版本号
# 例: go get github.com/spf13/cast@v1.4.1

安装 spf13/cast 包

spf13/cast 是一个数据类型转换包,可以非常简单地对常见数据类型互相转换,并且不会引发 panic

  • • 执行命令:
$ go get github.com/spf13/cast@v1.4.1
# 输出如下
go: added github.com/spf13/cast v1.4.1
  • • 打开 go.mod 文件,内容如下:
module helloworld

go 1.19

require github.com/spf13/cast v1.4.1 // indirect
  • • 在 go.mod 旁边多了一个 go.sum 文件,内容如下:
github.com/davecgh/go-spew 
...
... 
github.com/stretchr/testify
  • • 使用安装好的包

将如下代码写入文件 main.go

package main

import (
    "fmt"

    "github.com/spf13/cast"
)

func main() {
    s := cast.ToString(1024)
    fmt.Printf("s is a %T, val = %s\\n", s, s)
}
$ go run main.go
// 输出如下
/**
  s is a string, val = 1024
*/

查看依赖

# 列表输出
$ go list -m -m all
# # json 输出
$ go list -m -json all 

# 输出当前项目的 Module 名称以及依赖报名
helloworld
...
...
github.com/spf13/cast v1.4.1
... 
...

升级依赖

# 语法规则: 
# 升级次级或补丁版本号
go get -u 包名@版本号
# 仅升级补丁版本号
go get -u=patch 包名@版本号

这里,我们将 spf13/cast 包从 v1.4.1 升级到 1.5.0,执行如下命令:

go get -u github.com/spf13/cast@v1.5.0
# 输出如下
go: upgraded github.com/spf13/cast v1.4.1 => v1.5.0

查看 go.mod 文件,内容已经更新为:

module helloworld

go 1.19

require github.com/spf13/cast v1.5.0 // indirect

删除依赖

当前项目中有些包已经不再使用了,但是 go.mod 文件中依然定义了依赖关系,可以使用下面的命令自动整理优化 go.mod 文件。

$ go mod tidy

常用命令

go mod init  # 初始化
go mod tidy  # 更新 (移除) 依赖文件
go mod download  # 下载依赖文件

go mod vendor  # 将依赖全部归档到 vendor 目录
go mod edit    # 修改依赖文件
go mod graph   # 打印依赖关系 图
go mod verify  # 校验依赖

到这里,Go Modules 的基础配置及使用已经完成,我们可以快速导入成熟的第三方库来加速开发。

编辑器

工欲善其事,必先利其器。 现代化项目开发,一个高效的 IDE 必不可少。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    593

    浏览量

    27392
  • URL
    URL
    +关注

    关注

    0

    文章

    139

    浏览量

    15328
  • go语言
    +关注

    关注

    1

    文章

    158

    浏览量

    9047
收藏 人收藏

    评论

    相关推荐

    如何快速搭建MQTT协议的测试环境

    大家好,我是麦叔,之前有小伙伴建议出期如何快速搭建MQTT协议的测试环境,因为自己写的mq
    的头像 发表于 12-26 09:28 2076次阅读
    如何<b class='flag-5'>快速</b><b class='flag-5'>搭建</b><b class='flag-5'>一</b><b class='flag-5'>个</b>MQTT协议的测试<b class='flag-5'>环境</b>

    基于RFID的现代化奶牛场管理应用

    0 引言 信息与自动现代管理技术在畜牧业发展中的地位越来越重要,基于无线射频原理的奶牛自动识别系统,是现代化奶牛场管理 中不可或缺的部分。无线射频识别技术(RFID)是
    发表于 07-17 08:31

    怎么强化现代化IC的设计环境

    数字设计及验证技术演进的概观现代化IC设计环境必须强化的方法
    发表于 04-09 06:17

    现代化网络的完全响应式设计方案

    现代化的网络可以完全响应,并且每天都有更多的设计师意识到这点。 但是,在响应式设计方面存在艰巨的挑战: 嵌入式内容 。从YouTube到Vimeo的每个视频网站都具有固定为特定大
    发表于 12-23 08:04

    Go语言及Beego框架环境搭建相关资料推荐

    1、Go语言及Beego框架环境搭建  在开始环境搭建之前,我们先起来看看:  
    发表于 10-17 16:57

    浅谈现代化设备维修与可持续发展

    针对现代化设备维修存在的严重资源与环境问题,简要阐述设备维修与可持续发展的关系。
    发表于 12-24 11:52 30次下载

    php开发环境搭建和使用

    本文主要介绍的是php开发环境搭建和使用。apache在默认情况下不会处理php页面,Apache处理php页面的步骤:即:php开发环境
    的头像 发表于 02-01 15:26 3452次阅读
    php<b class='flag-5'>开发</b><b class='flag-5'>环境</b>的<b class='flag-5'>搭建</b>和使用

    代码现代化是什么,如何使用它来优化代码

    Robert Geva谈论代码现代化是什么以及开发人员如何使用它来优化代码。
    的头像 发表于 11-12 06:00 2561次阅读

    如何搭建鸿蒙开发环境

    开发一个平台的程序,那么首先要搭建出本地开发环境,那么如何搭建鸿蒙
    的头像 发表于 02-24 11:25 3751次阅读
    如何<b class='flag-5'>搭建</b>鸿蒙<b class='flag-5'>开发</b><b class='flag-5'>环境</b>

    网络基础设施现代化必需的五步骤

    基础设施现代化这个术语,对不同的人意味着不同的东西。毕竟,没有任何两企业网络基础架构的设计和构建是基于相同的业务目标。然而,与很久以前的网络相比,新构建的基础设施之间的共同点会更多。因此,基础设施现代化的过程可能在很多方面都很
    发表于 06-14 16:56 1692次阅读

    如何快速搭建轻应用或行业应用

    随着高速发展的数字化时代,越来越多的企业应用,对技术要求越来越高,软件实现越来越复杂,需要更快、更高效的开发。 如何快速搭建轻应用或行业
    的头像 发表于 08-24 09:56 2528次阅读

    如何搭建套 Linux 开发环境

    对于刚接触嵌入式 Linux 系统开发的同学来说,搭建开发环境不小的挑战,我看到过很多在入
    的头像 发表于 08-25 08:54 2398次阅读

    HPM6750开发环境搭建快速上手

    鉴于不少小伙伴已经拿到了HPM6750的开发套件,本文将基于HPM6750 EVKMINI开发板,从开发环境搭建开始,带你
    的头像 发表于 12-20 11:52 3806次阅读

    喜报丨软通动力应用现代化平台工程产品及服务解决方案荣获“2023年应用现代化典型案例”称号

    在数字经济时代,应用现代化正在成为共识。 近日,中国软件行业协会首届“应用现代化产业实践优秀案例”评选结果揭晓, 软通动力应用现代化研究
    的头像 发表于 11-13 19:30 720次阅读
    喜报丨软通动力应用<b class='flag-5'>现代化</b>平台工程产品及服务解决方案荣获“2023年应用<b class='flag-5'>现代化</b>典型案例”称号

    软通动力应用现代化平台工程产品及服务解决方案荣获“2023年应用现代化典型案例”称号

    北京2023年11月14日 /美通社/ -- 在数字经济时代,应用现代化正在成为共识。 近日,中国软件行业协会首届“应用现代化产业实践优秀案例”评选结果揭晓,软通动力应用
    的头像 发表于 11-14 16:50 634次阅读
    软通动力应用<b class='flag-5'>现代化</b>平台工程产品及服务解决方案荣获“2023年应用<b class='flag-5'>现代化</b>典型案例”称号