Go后端开发 -- 环境搭建

Go后端开发 – 环境搭建

文章目录

  • Go后端开发 -- 环境搭建
  • 一、环境配置
  • 二、IDE的选择
  • 三、使用go mod构建项目
    • 1.初始化项目
    • 2.添加依赖项
    • 3.运行项目
  • 四、环境报错
    • 1.VS Code中gopls报错


一、环境配置

Go官网下载地址:https://golang.org/dl/
https://go.dev/dl/
Go官方镜像站(推荐):https://golang.google.cn/dl/

以Linux版本为例:

  • 下载后,上传到Linux服务器中,解压到/usr/local路径中:
    sudo tar -zxvf go1.21.5.linux-amd64.tar.gz -C /usr/local/
    进入/usr/local路径,有一个go文件夹:
    在这里插入图片描述
    进入该文件夹
    在这里插入图片描述
    其中src目录下是go的源码
    在这里插入图片描述
    进入bin目录
    在这里插入图片描述
    有两个指令,go是go语言的编译环境,我们需要将当前路径配置到系统环境变量中;

  • 配置环境变量:
    回到家目录下,打开默认配置文件:
    在这里插入图片描述
    加入以下环境变量:
    export GOROOT="/usr/local/go" export GOPATH=$HOME/go export GOBIN=$GOROOT/bin export PATH=$PATH:$GOBIN
    在这里插入图片描述
    GOROOT:go语言的源码包所在的路径;
    GOPATH:go语言的工作路径,可以自定义;
    GOBIN:go语言源码编译环境路径;
    PATH:配置系统环境变量;

    配置完后,保存并加载一下:
    在这里插入图片描述
    检查版本,验证环境配置是否成功:
    在这里插入图片描述
    go --help指令能够查看当前有哪些指令可以使用:
    在这里插入图片描述

  • 配置GOPATH:
    gopath就是go项目代码存放的位置,可以自定义,该目录下有三个子目录:src,pkg, bin;

    • src:里面的每一个子目录,就是一个包,包内是go的源码文件
    • pkg:编译后生成的,包的目标文件
    • bin:生成的可执行文件
      在这里插入图片描述
  • GOPROXY
    Go1.14版本之后,都推荐使用go mod模式来管理依赖了,也不再强制我们把代码必须写在GOPATH下面的src目录了,你可以在你电脑的任意位置编写go代码。
    默认GoPROXY配置是:GOPROXY=https://proxy.golang.org,direct,
    由于国内访问不到 https://proxy.golang.org 所以我们需要换一个PROXY,这里推荐使用https://goproxy.iohttps://goproxy.cn
    可以执行下面的命令修改GOPROXY:

go env -w GOPROXY=https://goproxy.cn,direct

Go 1.11 版本推出modules机制,简称 mod,更加易于管理项目中所需要的模块。模块是存储在文件树中的 Go 包的集合,其根目录中包含 go.mod 文件。 go.mod 文件定义了模块的模块路径,它也是用于根目录的导入路径,以及它的依赖性要求。每个依赖性要求都被写为模块路径和特定语义版本。
从 Go 1.11 开始,Go 允许在$GOPATH/src的任何目录下使用 go.mod 创建项目。在 $GOPATH/src 中,为了兼容性,Go 命令仍然在旧的 GOPATH 模式下运行。从 Go 1.13 开始,go.mod模式将成为默认模式。
Go Modules 在 Go 1.11 及 Go 1.12 中有三个模式,根据环境变量 GO111MODULE 定义:

  • 默认模式(未设置该环境变量或 GO111MODULE=auto

    1. 当前目录不在 GOPATH/src/ 下;
    2. 在当前目录或上层目录中存在 go.mod 文件;
  • GOPATH 模式(GO111MODULE=off
    Go 命令行工具从不使用 Go Modules。相反,它查找 vendor 目录和 GOPATH 以查找依赖项。

  • Go Modules 模式( GO111MODULE=on
    Go 命令行工具只使用 Go Modules,GOPATH不再作为导入目录,但它还是会把下载的依赖储存在 GOPATH/pkg/mod 中,也会把 goinstall的结果放在 GOPATH/bin 中,只移除了 GOPATH/src/
    如果 GO111MODULE 没有显式设置,那么默认为 on。如果 go env 查出来的环境变量 GO111MODULE 为空,那么 go 编译器默认 GO111module 为 on。

Go modules 的使用:

# 临时开启 Go modules 功能
export GO111MODULE=on
# 永久开启 Go modules 功能
go env -w GO111MODULE=on# 设置 Go 的国内代理,方便下载第三方包
go env -w GOPROXY=https://goproxy.cn,direct

如果设置失败,可以直接修改~/.bashrc配置文件:
在这里插入图片描述
逗号后面可以增加多个 proxy,最后的 direct 则是在所有 proxy 都找不到的时候,直接访问,代理访问不到的私有仓库就可以正常使用了。
其它代理请参考:
https://www.cnblogs.com/feiquan/p/13357971.html
https://studygolang.com/articles/23599?fr=sidebar
最后通过env查看:
在这里插入图片描述

二、IDE的选择

目前go开发的主流IDE有GoLand和VS Code,下面以VS Code为例,实现go的开发环境配置;

  • 使用VS Code插件remote SSH远程连接Linux云服务器:
    在这里插入图片描述
  • 安装插件:
    在这里插入图片描述
  • 配置GOPROXY和Go Module:
    Go1.14版本之后均使用go mod来管理依赖环境
sudo go env -w GOPROXY=https://goproxy.cn,direct
sudo go env -w GO111MODULE=on

三、使用go mod构建项目

1.初始化项目

我们使用了go mod模块,就可以在$GOPATH以外的目录创建项目,然后初始化 go mod init project_name,成功之后会发现目录下会生成一个 go.mod 文件。
在这里插入图片描述
在这里插入图片描述
查看内容
在这里插入图片描述
go.mod 文件只存在于模块的根目录中模块子目录的代码包的导入路径等于模块根目录的导入路径(就是前面说的 module path)加上子目录的相对路径。

比如,我们如果创建了一个子目录叫 common,我们不需要(也不会想要)在子目录里面再运行一次 go mod init 了,这个代码包会被认为就是 go_test 模块的一部分,而这个代码包的导入路径就是 go_test/common

2.添加依赖项

在 go_test 文件夹下创建main.go并添加以下内容

package mainimport ("net/http""github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong",})})r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

执行 go build main.go 之后会自动下载三方包到默认的目录 $GOPATH/pkg/mod,也就是 Mod Cache 路径;
在这里插入图片描述
进入$GOPATH/pkg/mod目录查看
在这里插入图片描述
查看go.mod文件和go.sum文件:
在这里插入图片描述

  • module 表示模块名称
  • require 依赖包列表以及版本
    一般来说,require () 是不需要自己手动去修改的,当运行代码的时候,会根据代码中用到的包自动去下载导入
  • exclude 禁止依赖包列表,不下载和引用哪些包(仅在当前模块为主模块时生效)
  • replace 替换依赖包列表和引用路径(仅在当前模块为主模块时生效)
    replace 对于国内开发来说是个神功能,他可以将代码中使用,但国内被墙的代码替换成 github上的下载路径,例如:golang.org/x/ 下的包,全都替换成 github地址上的包,版本使用 latest 即可。
    replace 指令可以将依赖的模块替换为另一个模块,例如由公共库替换为内部私有仓库。
replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5replace (golang.org/x/net => github.com/golang/net latestgolang.org/x/tools => github.com/golang/tools latestgolang.org/x/crypto => github.com/golang/crypto latestgolang.org/x/sys => github.com/golang/sys latestgolang.org/x/text => github.com/golang/text latestgolang.org/x/sync => github.com/golang/sync latest
)

indirect 表示这个库是间接引用进来的。
使用 go list -m all 可以查看到所有依赖列表,也可以使用 go list -json -m all 输出 json格式的打印结果。

除了 go.mod 之外,go 命令行工具还维护了一个 go.sum 文件,它包含了指定的模块的版本内容的哈希值作为校验参考:
在这里插入图片描述
go 命令行工具使用 go.sum 文件来确保你的项目依赖的模块不会发生变化——无论是恶意的,还是意外的,或者是其它的什么原因。go.mod 文件和 go.sum 文件都应该保存到你的代码版本控制系统里面去。

go.sum 这个文件记录了源码的直接依赖和间接依赖包的相关版本的 hash 值,用来校验本地包的真实性。在构建的时候,如果本地依赖包的 hash 值与 go.sum 文件中记录的不一致,就会被拒绝构建,这样可以确保你的项目所依赖的 module 内容,不会被恶意或意外篡改。

3.运行项目

  • 编译代码:
    go build main.go
    在这里插入图片描述
  • 运行代码:
    go run main.go
    在这里插入图片描述

四、环境报错

1.VS Code中gopls报错

显示gopls was not able to find modules in your workspace,这种报错的原因是,使用VS Code打开的远程目录当做workspace,但是由于go mod机制,源码不在$GOPATH中,需要使用go mod init来初始化项目,而初始化形成的go.mod文件不在workspace目录下,而在其子目录下,导致gopls寻找modules错误;
在这里插入图片描述
解决方案是使用go work机制,即多模块工作区机制(要把哪些mod纳入到你的工作区内);
vscode打开的文件夹的路径默认作为了其工作区(workspace),而这个工作区的根目录要有go.mod文件,如果根目录没有这个go.mod就要指定哪些子目录的go mod纳入工作区
go work init
go work use 需要纳入工作区的子目录
在这里插入图片描述
在这里插入图片描述
这样gopls就不会报错了;
也可以选择VS Code直接打开项目目录作为workspace,但这样比较不方便;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/223126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装nodejs,配置环境变量并将npm设置淘宝镜像源

安装nodejs并将npm设置淘宝镜像源 1. 下载nodejs 个人不喜欢安装包,所以是下载zip包的方式。这里我下载的node 14解压包版本 下载地址如下:https://nodejs.org/dist/v14.15.1/node-v14.15.1-win-x64.zip 想要其他版本的小伙伴去https://nodejs.org/di…

nodejs+vue+ElementUi资源互助共享平台的设计

后台:管理员功能有个人中心,用户管理,卖家管理,咨询师管理,萌宝信息管理,幼儿知识管理,保姆推荐管理,音频资源管理,二手商品管理,商品分类管理,资…

第26关 K8s日志收集揭秘:利用Log-pilot收集POD内业务日志文件

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 OK,到目前为止,我们的服务顺利容器化并上了K8s,同时也能通过外部网络进行请求访问,相关的服务数据也能进行持久化存储了,那么接下来…

管理 Jenkins 详细指南

目录 系统配置 安全 状态信息 故障 排除 工具和操作 系统配置 系统,配置全局设置和路径,端口更改,下载地址等。 工具,配置工具、其位置和自动安装程序。 插件,添加、删除、禁用或启用可以扩展 Jenkins 功能的插…

2. 行为模式 - 命令模式

亦称: 动作、事务、Action、Transaction、Command 意图 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销…

电力系统风储联合一次调频MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 简介: 同一电力系统在不同风电渗透率下遭受同一负荷扰动时,其频率变化规律所示: (1)随着电力系统中风电渗透率的不断提高,风电零惯性响…

09.list 容器

9、list 容器 功能: 将数据进行链式存储 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成: 链表由一系列结点组成 结点的组成: 一个是存…

【Linux基础开发工具】gcc/g++使用make/Makefile

目录 前言 gcc/g的使用 1. 语言的发展 1.1 语言和编译器自举的过程 1.2 程序翻译的过程: 2. 动静态库的理解 Linux项目自动化构建工具-make/makefile 1. 快速上手使用 2. makefile/make执行顺序的理解 前言 了解完vim编辑器的使用,接下来就可以尝…

Redis可视化工具Redis Desktop Manager mac功能特色

Redis Desktop Manager mac是一款非常实用的Redis可视化工具。RDM支持SSL / TLS加密,SSH隧道,基于SSH隧道的TLS,为您提供了一个易于使用的GUI,可以访问您的Redis数据库并执行一些基本操作:将键视为树,CRUD键…

如何实现免费无限流量云同步笔记软件Obsidian?

目录 前言 如何实现免费无限流量云同步笔记软件Obsidian? 一、简介 软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群晖Synol…

最优化理论与方法(2)---单纯形方法

文章目录 1. 线性规划1.1 基本介绍1.2 最优基本可行解 2. 表格形式单纯形方法2.1 基本知识引入2.2 求解步骤2.3 例题12.4 例题2 3. 单纯形法的进一步讨论3.1 无界解3.2 多个解 1. 线性规划 1.1 基本介绍 把握住两点:最小化和等号。  如果问题是最大化max&#xff…

Uniapp 开发 BLE

BLE 低功耗蓝牙(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart),用于医疗保健、运动健身、安防、工业控制、家庭娱乐等领域。在如今的物联网时代下大放异彩,扮演者重要一环&#xff…

安装gnvm,nodejs,npm使用方法

安装gnvm,nodejs,npm使用方法 一、安装gnvm gnvm.exe下载地址: https://download.csdn.net/download/hsg77/88651752 http://ksria.com/gnvm/#download 二、配置gnvm环境变量 新建目录,如:d:/nodejs 并把gnvm.exe存储到此目录 并把d:/node…

js显示实时时间

文章目录 一、效果二、思路三、最后 一、效果 用JS实现XXXX年XX月XX日 星期X XX时XX分XX秒 效果 效果 &#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>time</title><script t…

Xcode15 iOS 17 Simulator 离线安装,模拟器安装

Xcode 15 安装包的大小相比之前更小&#xff0c;因为除了 macOS 的 Components&#xff0c;其他都需要动态下载安装&#xff0c;否则提示 iOS 17 Simulator Not Installed。 如果不安装对应的运行模拟库 无法真机和模拟器运行&#xff0c;更无法新建项目。但是由于模拟器安装包…

智能图像编辑软件Luminar Neo mac提供多种调整和滤镜选项

Luminar Neo mac是一款由Skylum公司开发的AI技术图像编辑软件&#xff0c;旨在为摄影师和视觉艺术家提供创意图像编辑解决方案。Luminar Neo拥有强大的AI技术和丰富的后期处理工具&#xff0c;可帮助用户快速轻松地实现从基本到高级的图像编辑需求。 Luminar Neo提供了多种调整…

4 postman响应数据解析

上一篇:3 使用postman批量创建测试数据-CSDN博客 在接口测试中,从接口的响应结果中获取数据是很常用的。比如说做断言的时候,需要确保接口返回数据是符合预期的。又比如有些接口的输入参数值,需要用到前面接口运行返回的数据。下面先介绍如何解析响应数据(以json数…

神经网络:深度学习基础

1.反向传播算法&#xff08;BP&#xff09;的概念及简单推导 反向传播&#xff08;Backpropagation&#xff0c;BP&#xff09;算法是一种与最优化方法&#xff08;如梯度下降法&#xff09;结合使用的&#xff0c;用来训练人工神经网络的常见算法。BP算法对网络中所有权重计算…

解决IDEA编译/启动报错:Abnormal build process termination

报错信息 报错信息如下&#xff1a; Abnormal build process termination: "D:\Software\Java\jdk\bin\java" -Xmx3048m -Djava.awt.headlesstrue -Djava.endorsed.dirs\"\" -Djdt.compiler.useSingleThreadtrue -Dpreload.project.path………………很纳…

Python并行计算和分布式任务全面指南

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python并行计算和分布式任务全面指南。全文2900字&#xff0c;阅读大约8分钟 并发编程是现代软件开发中不可或缺的一部分&#xff0c;它允许程序同时执行多个任务&#xff0…