GoLang:Go语言开发环境的配置

Go语言
Go语言开发环境的配置

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/141780702
HuaWei:https://bbs.huaweicloud.com/blogs/434153

在这里插入图片描述


【介绍】:本文简要介绍Go语言开发环境部署。


1. Go语言简介

Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go语言的设计初衷是提高程序员在处理多核处理器、大型代码库和动态网络环境中的开发效率。

2. 安装Go语言

2.1 下载Go语言安装包

访问Go语言的官方网站下载页面:Go Downloads。选择适合你的操作系统的安装包。

2.2 安装Go语言

2.2.1 Windows

运行下载的安装程序,按照指示完成安装,基本就是点“下一步”:

在这里插入图片描述
在这里插入图片描述

安装程序会将Go安装在默认路径(默认是C:\Program Files\Go),并且会自动设置GOROOT环境变量。

在这里插入图片描述

点击“Install”(安装),这需要你同意管理员权限:
在这里插入图片描述
在这里插入图片描述
最后右键点击“此电脑”,在右键菜单中选择“属性”,打开系统设置:

在这里插入图片描述
点击“高级系统设置”:
 0

2.2.2 Linux

可以使用命令先下载包:

VERSION=1.23.0
OS=linux
ARCH=amd64
curl -O https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz

其中$VERSION$OS$ARCH需要替换成相应的版本号、操作系统和架构。
在这里插入图片描述

也可以直接替换为具体的版本好和操作系统:

cirl -O https://dl.google.com/go/go1.23.0.linux-amd64.tar.gz

下载后需要设置一些环境变量来确保Go命令可以在任何地方运行:

  1. 设置环境变量:您需要设置GOROOT和GOPATH环境变量,并更新PATH环境变量。
echo "export GOROOT=/usr/local/go" >> ~/.bashrc
echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin" >> ~/.bashrc
source ~/.bashrc

这些命令将Go的安装目录设置为GOROOT,将工作目录设置为GOPATH,并将Go的二进制文件目录添加到PATH中。
在这里插入图片描述

2.2.3 macOS

先下载Go语言安装包:

  1. 访问Go语言的官方网站下载页面:Go Downloads。
  2. 选择适合macOS的安装包。通常是一个.pkg文件,例如go1.23.0.darwin-amd64.pkg

在这里插入图片描述

接着,双击下载的.pkg文件开始安装过程。跟随安装向导的指示进行安装。通常,安装向导会引导你通过一系列步骤,包括接受许可协议。安装程序默认将Go安装在/usr/local/go目录。这个过程中,GOROOT环境变量通常会被自动设置为此路径。
安装完成后,你需要确保GOPATH环境变量被设置,以及PATH环境变量被更新,以便在任何地方都能运行Go命令。

打开终端,输入以下命令来设置GOPATH,并将Go的二进制文件目录添加到PATH中:

echo "export GOPATH=$HOME/go" >> ~/.bash_profile
echo "export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin" >> ~/.bash_profile
source ~/.bash_profile

这些命令将工作目录设置为GOPATH,并将Go的二进制文件目录添加到PATH中。

2.2.4 Docker命令安装模式

使用Docker安装Go语言是一个非常方便的方法,特别是当你想在隔离的环境中运行Go应用或者进行多版本管理时。

打开终端。先获取Go语言的Docker镜像,使用Docker命令拉取官方的Go镜像。你可以指定需要的Go版本,例如拉取1.23.0版本:

docker pull golang:1.23.0

这将从Docker Hub下载Go语言的官方镜像,等待下载成功完成(需要非异常连接到网络)。

在这里插入图片描述

一旦镜像下载完成,你可以启动一个容器来运行Go环境:

docker run -it --name go-container golang:1.23.0 /bin/bash

这个命令会启动一个名为go-container的容器,并提供一个交互式的终端。然后可以在Docker中编写和运行Go代码。你没法直接在里面编辑内容,因此这个容器中,是没有vi、vim等编辑器的,需要自己安装:

apt update
apt install vim -y

在容器内部,你可以使用vinano或其他编辑器来编写Go代码。例如,创建一个新的Go文件:

vim hello.go

并输入以下内容:

package mainimport "fmt"func main() {fmt.Println("Hello, World!")
}

在这里插入图片描述

保存并退出编辑器。在容器内编译并运行Go程序:

go run hello.go

如果运行正常,这应该会输出Hello, World!

在这里插入图片描述

使用Docker卷来持久化Go项目

如果你想在容器外部编辑Go代码,并让容器访问这些代码,可以使用Docker卷来挂载本地目录到容器中:

docker run -it --name go-container -v $(pwd)/my-go-project:/go/src/my-go-project golang:1.23.0

这个命令会将当前目录下的my-go-project文件夹挂载到容器的/go/src/my-go-project目录。这样,你就可以在本地编辑文件,并在容器中编译和运行。

如果此GoLang容器不再需要,你可以停止并删除容器:

docker stop go-container
docker rm go-container

在这里插入图片描述

如果不再需要Go镜像,也可以将其删除:

docker rmi golang:1.23.0

在这里插入图片描述

使用Docker安装和运行Go语言提供了一个干净、一致的开发环境,同时避免了在本地机器上安装多个版本的复杂性。这对于开发和测试非常有用。不过在生产环境,我们很少直接使用命令模式来部署Go环境,因为这不满足自动化要求。

3. 配置环境变量

3.1 设置GOROOT和GOPATH

  • GOROOT:Go语言安装目录的环境变量,大多数情况下安装程序会自动设置。
  • GOPATH:你的工作目录,用于存放Go代码和依赖包。你需要手动设置这个环境变量。例如,在bash中,你可以添加以下行到~/.bash_profile~/.bashrc
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    

3.2 更新PATH环境变量

确保添加Go的bin目录到PATH中,这样可以在任何地方运行Go命令。

4. 验证安装

打开终端或命令提示符,输入以下命令来检查Go版本,确认Go语言环境已正确安装和配置:

go version

如果看到类似与下面的回显说明你已经成功地安装了:

go version go1.23.0 windows/amd64

这意味着可以使用go CLI工具了,你可以通过help命令查看go CLI为开发者提供的命令:

在这里插入图片描述

5. 设置IDE(可选)

虽然你可以使用任何文本编辑器来编写Go代码,但配置一个支持Go语言的IDE可以提高开发效率。这里我比较推荐使用Visual Studio Code配合Go插件。

在这里插入图片描述

这样,您就可以按照这些步骤来安装和配置Go语言开发环境。如果在安装过程中遇到任何问题,可以参考Go官方文档或在相关社区寻求帮助。

也可以使用专门的Go开发环境如jetbrainsGoLand,它的好处在于你不需要自己安装Go环境了。在其下载页面下载安装版本 https://www.jetbrains.com/go/download/#section=windows:

在这里插入图片描述
然后依据提示完成安装:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这里建议添加到上下文菜单,以便于后续在右键目录菜单中直接打开:

在这里插入图片描述
完成最后的安装:
在这里插入图片描述

6. 关于DockerFile和Docker Compose部署

在使用DockerDocker Compose部署多容器Go应用时,通常每个服务(容器)都应该有自己的目录,其中包含该服务的Dockerfile和其他配置文件。这种结构不仅有助于保持项目的组织性,还可以使每个服务的构建和部署更加独立和灵活。

项目结构示例如下:

/
├── docker-compose.yml
├── service1/
│   ├── Dockerfile
│   ├── main.go
│   ├── go.mod
│   ├── go.sum
│   └── .env
└── service2/├── Dockerfile├── main.go├── go.mod├── go.sum└── .env

在根目录下的docker-compose.yml文件中,你可以定义所有服务的配置,如下所示:

version: '3.8'
services:service1:build: ./service1ports:- "8080:8080"service2:build: ./service2ports:- "9090:9090"

这个配置文件指定了两个服务,每个服务都有自己的构建上下文和端口映射。

对于每个服务,你可以在其目录下创建一个Dockerfile。例如,service1/Dockerfile可能如下所示:

# 使用Alpine版本的Go镜像作为构建环境
FROM golang:alpine as builder# 设置工作目录
WORKDIR /app# 复制go mod和sum文件
COPY go.mod go.sum ./# 清理Go模块缓存
RUN go clean -modcache# 下载所有依赖
RUN go mod tidy
RUN go mod download# 复制源代码到容器中
COPY . .# 构建应用程序
RUN CGO_ENABLED=0 GOOS=linux go build -o service1 .# 从builder镜像中复制构建的可执行文件
COPY --from=builder /app/service1 /service1# 安装必要的包,例如busybox(包含sh)
RUN apk add --no-cache busybox# 运行应用程序
CMD ["/service1"]

随便写一点代码作为service1的main.go:

package mainimport ("fmt""net/http""os"
)func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, you've reached service1!")})port := os.Getenv("PORT")if port == "" {port = "8080" // 默认端口}fmt.Printf("Service1 is running on port %s\n", port)http.ListenAndServe(":"+port, nil)
}

go项目往往还有go.modgo.sum文件,比如:

module service1go 1.17require (github.com/gin-gonic/gin v1.7.4github.com/sirupsen/logrus v1.8.1
)
github.com/gin-gonic/gin v1.7.4 h1:...
github.com/gin-gonic/gin v1.7.4/go.mod h1:...
github.com/sirupsen/logrus v1.8.1 h1:...
github.com/sirupsen/logrus v1.8.1/go.mod h1:...

类似地,完成service2。在包含docker-compose.yml的目录中运行以下命令来构建所有服务的镜像并启动容器:

docker-compose up --build

在这里插入图片描述
如果运行成功,可以看到如下信息:

[+] Running 3/3✔ Network egs_default       Created                                                                                                                                                        0.2s✔ Container egs-service1-1  Started                                                                                                                                                        2.3s✔ Container egs-service2-1  Started   

这里运行了2个Go容器,可以使用下面的命令查看该项目的Docker容器:

docker compose ps

(旧版本的Docker Compose需要使用docker-compose ps

此命令类似于docker ps,但是仅仅会显示此Docker Compose项目所运行的容器。
在这里插入图片描述

当不再需要运行容器时,可以使用以下命令来停止并移除容器:

docker-compose down

这种结构和方法提供了更大的灵活性和可扩展性,适合复杂的多服务应用。

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

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

相关文章

【Matlab】时间序列模型(ARIMA)

文章目录 前言一、示例二、代码实现----Matlab全部数据的平稳性检验ADF检验图检验法 划分训练集平稳性检验确定 p,q结果分析和模型检验模型预测 前言 接上一篇博客,用 Matlab 完成代码编写。 【学习笔记】时间序列模型(ARIMA) 一、示例 已知一个上市公…

Pandas 9-绘制柱状图

1. 准备数据 首先,需要准备一个DataFrame。 import pandas as pd # 创建一个DataFrame data { Name: [Alice, Bob, Charlie, David], Age: [24, 27, 22, 32], City: [New York, Los Angeles, Chicago, Houston], Score: [85, 92, 78, 88]} df pd.…

sql-labs46-50通关攻略

第46关 一.查询数据库 http://172.16.1.142/Less-46/?sort1%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)--http://172.16.1.142/Less-46/?sort1%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)-- 二.查表 http://172.16.1.142/Les…

软件测试 | 测试用例

测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境,测试步骤,测试数据,预期结果等要素。 设计测试用例原则⼀: 测试用例中⼀个必需部分是对…

【微机原理】指令JZ和JNZ的区别

🌟 嗨,我是命运之光! 🌍 2024,每日百字,记录时光,感谢有你一路同行。 🚀 携手启航,探索未知,激发潜能,每一步都意义非凡。 JZ(Jump …

php特性刷题

93 上面注释的是一些配置信息 然后包含flag.php页面 高亮显示 如果,先判断是否存在GET传参的参数num,如果弱比较等于4476,就会输出“no non no !” 如果包含字母那么就错误(包含大小写) 判断变量 $num 是否等于 4…

QEMU - user network

Documentation/Networking - QEMUQEMU/KVM中的网络虚拟化--Part2 User Networking | Xiaoye Zhengs blog (zxxyy.github.io)QEMU Network — ARM SoC Device Assignment Notes documentation (cwshu.github.io)slirp / libslirp GitLabGitHub - virtualsquare/libvdeslirp: li…

Python中排序算法之选择排序

选择排序算法是对《Python中排序算法之冒泡排序》中提到的冒泡排序算法的改进。 1 选择排序原理 选择排序是在参加排序的所有元素中找到数值最小(或最大)的元素,如果它不是左侧第一个元素,就使它与左侧第一个元素中的数据相互交…

Mysql8利用binlog实现数据恢复

文章目录 1binlog基本概念2 binlog相关常用命令3 binlog工具mysqlbinlog4 测试数据准备&导入数据5 模拟误删表6 数据恢复方式说明7 数据恢复分析(偏移量方式恢复)8 数据恢复9 验证10 数据恢复的局限性11 总结 1binlog基本概念 binlog即binary log,二进制日志文件…

Python爬虫02

xml 和html 区别 jsonpath模块 场景 多层嵌套的复杂字典直接提取数据 安装 pip install jsonpath使用 from jsonpath import jsonpathret jsonpath(dict, jaonpath语法规则字符串)语法规则 eg:

基于PHP评论区的存储型XSS漏洞

评论区的XSS漏洞是指攻击者在评论区输入恶意脚本,当其他用户浏览该页面时,这些恶意脚本会被执行,从而造成安全威胁。这种漏洞通常出现在网站没有对用户输入进行充分过滤和转义的情况下,为存储型XSS。存储型XSS攻击是指攻击者在目标…

使用 EasyExcel 高效读取大文件 Excel

使用 EasyExcel 高效读取大文件 Excel 的最佳实践 在现代应用中,数据处理经常涉及到大规模数据集的处理,Excel 作为一种常见的文件格式,经常用于数据导入和导出。然而,传统的 Excel 处理库如 Apache POI 在处理大文件时可能会面临…

实战项目:俄罗斯方块(一)

文章目录 🍊自我介绍🍊vt100 控制码1.概述2.数字格式①常用数字控制码②常用控制码 🍊绘制方格 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我…

关于VUE3开发频繁引入ref,reactive,computed等基础函数。

利用unplugin-auto-import插件可以避免频繁引入ref,reactive,computed等基础函数。 1.安装unplugin-auto-import依赖 npm i -D unplugin-auto-import 2.在vite.config.ts中注入依赖 效果

Webfunny前端监控如何搭建高并发使用场景

Webfunny可以支持千万级别PV的日活量了。但是,我们默认的部署配置,是无法支持这么高的日活量的,需要我们做一些支持高并发的配置和操作,下面让我们一起看下如何让webfunny支持更高的并发量吧,下图为webfunny高并发架构…

AI安全前沿:模型攻击与防御策略

引言 随着chatGPT的横空出世,通用人工智能的时代正式开启。人工智能极大地影响了人类的生活方式和生产方式,例如以ChatGPT为代表的各类大模型,能够理解和生成人类语言,并以对话的方式同人类进行互动,能够执行撰写文本…

Hot Chips 2024:博通(Broadcom)展示AI计算ASIC的光学连接

引言 在2024年的Hot Chips会议上,博通展示了其最新的AI计算专用集成电路(ASIC),这款ASIC集成了光学连接技术。这一展示不仅体现了博通在定制AI加速器领域的领先地位,也预示着未来数据中心网络技术的一个重要发展方向。…

重塑视频监控体验:WebRTC技术如何赋能智慧工厂视频高效管理场景

视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。 EasyCVR平台不仅兼容多种主流标准协议及私有协议/SDK的接入(如&…

qt实现三原色滑动条变色

在qt中有这样一个控件: 就是这个Horizontal Slider他的作用相信大家都知道了,也就是通过滑动来改变数值。今天我们就使用这个控件实现一个三原色滑动变色。 实现效果: 1.创建UI界面 这个就不用多说了,这个大家就按照我的这个去…

Python虚拟环境创建和使用总结

参考: venv --- 虚拟环境的创建 — Python 3.12.5 文档 【Python进阶】Python虚拟环境使用全方位指南:从零开始轻松实践 - 知乎 (zhihu.com) Python 如何删除使用 venv 创建的 Python3 虚拟环境|极客教程 (geek-docs.com) 我们知道,python程序…