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

news2024/9/22 1:03:37
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 main

import "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: ./service1
    ports:
      - "8080:8080"

  service2:
    build: ./service2
    ports:
      - "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 main

import (
    "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 service1

go 1.17

require (
    github.com/gin-gonic/gin v1.7.4
    github.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.coloradmin.cn/o/2096368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款管理苹果设备的软件iMazing3中文破解安装激活教程

iMazing3官方版是一款管理苹果设备的软件,是一款帮助用户管理 IOS 手机的PC端应用程序,能力远超 iTunes 提供的终极 iOS 设备管理器。在iMazing官方版上与苹果设备连接后,可以轻松传输文件,浏览保存信息等,功能比Itune…

NDK编译c/c++文件成so库

目录 背景 Android NDK下载及配置 工程准备 创建Android.mk文件 创建Application.mk文件 编译项目 总结 背景 做算法开发,有时需要将算法编程成so库给其他人调用,很多时候都是在Android平台上使用,这样就会使用到Android NDK进行编译&…

高职院校大数据分析与可视化微服务架构实训室解决方案

一、前言 随着信息技术的飞速发展,大数据已成为推动社会进步与产业升级的关键力量。为了培养适应未来市场需求的高素质技术技能型人才,高职院校纷纷加大对大数据分析与可视化技术的教学投入。唯众,作为国内领先的职业教育解决方案提供商&…

论文速读|大型语言模型作为通用模式机器

项目地址:Large Language Models as General Pattern Machines 本研究探讨了大型语言模型(LLMs)作为通用模式机器的潜力,特别是在机器人技术领域。研究发现,LLMs 能够在没有额外训练的情况下,通过上下文学…

这才是HR想看到的应届生简历

速创猫今天给大家分享的是应届毕业生简历优化案例,希望对大家求职有帮助。速创猫总结了以下七条简历制作干货,希望对大家有帮助: 简洁明了:简历不是自传,不需要长篇大论。保持每份简历在一页纸内,突出关键…

Linux(CentOS)同步服务器时间之~chrony

Chrony 是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP 实现如 ntpd,Chrony 提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 C…

c++ 154 引用

#include<iostream> using namespace std; //引用作为函数参数不需要初始化 void myswap(int *a,int *b) {int c 0;c *a;*a *b;*b c; } void main03() {int a 10;//引用语法 Type & name var;int& b a;b 100;//相当于把a改成100&#xff1b;printf("…

素材无水印素材网站在哪下载?高清的无水印素材资源库分享

找高清无水印素材&#xff1f;蛙学网、Pixabay 等资源库全揭秘&#xff01; 创意十足的你&#xff0c;是不是常为网上素材的烦人水印而头疼&#xff1f;总在寻找高清、干净、无水印的素材资源&#xff0c;却无从下手&#xff1f;别急&#xff0c;今天就为大家推荐几个超实用的…

c++应用网络编程之八SOCKET探究

一、socket 在目前主流的网络通信中&#xff0c;SOCKET编程其实就是网络编程的代名词。在前面反复提到socket&#xff0c;那么socket到底是什么呢&#xff1f;英文的愿意是“插座、槽”的意思。这里虽然不讲解传统的网络协议但不得不简单说明一下。 首先从宏观上看&#xff0c…

《数字信号处理》学习01-离散时间信号与序列的卷积和运算

目录 一&#xff0c;信号 二&#xff0c;序列的运算 1&#xff0c;卷积和 2&#xff0c;matlab实现 相关的电子书籍请到这篇文章所在的专栏&#xff0c;并通过夸克网盘链接下载。 很多简单的知识点我就不再赘述了&#xff0c;接下来就着重记录我学习过程中遇到的较难理…

class 3: vue.js 3 计算属性

计算属性是一种Options API&#xff0c;Options API是一种通过对象定义属性、方法等框架API的方式我们知道&#xff0c;在模板中可以直接通过插值语法显示一些data属性中的数据。但是在某些情况下&#xff0c;可能需要对数据进行一些转化操作之后再显示&#xff0c;或者需要将多…

PostgreSQL技术内幕5:PostgreSQL存储引擎从磁盘到内存的读取

文章目录 0.简介1.背景知识1.1 计算机存储结构1.2 数据库常见的磁盘和内存访问形式 2. 整体获取层次3.元组介绍4. Buffer管理4.1 Buffer组成4.2 修改后落盘4.3 获取buffer页的流程 5.存储管理器&#xff08;SMGR)6.磁盘管理器&#xff08;MD)7.虚拟文件管理器&#xff08;VFD)8…

【攻防世界新手入门】simple_js

小宁发现了一个网页&#xff0c;但却一直输不对密码。&#xff08;Flag格式为 Cyberpeace{xxxxxxxxx} &#xff09; 该题来自攻防世界新手练习区的 GFSJ0480。 访问靶场&#xff0c;输入任意密码&#xff0c;弹出错误窗口并加载空页面&#xff0c;使用检查器查看对应源代码&…

zdppy+vue3+onlyoffice文档管理系统实战 20240901 上课笔记 基于验证码登录功能基本完成

遗留的问题 1、点击切换验证码2、1分钟后自动切换验证码 点击切换验证码 实现步骤&#xff1a; 1、点击事件2、调用验证码接口3、更新验证码的值 点击事件 给图片添加点击事件&#xff1a; <img :src" data:image/png;base64, captchaImg"style"widt…

ffplay源码分析(五)包缓存队列和帧缓存队列

在音视频处理流程中&#xff0c;ffplay的有两种队列&#xff0c;包缓存队列&#xff08;Packet Buffer Queue&#xff09;和帧缓存队列&#xff08;Frame Buffer Queue&#xff09;。这两个队列的存在&#xff0c;是为了适应音视频数据处理过程中的多线程架构——包括收包线程、…

win11+vscode+Flutter 开发环境配置

https://blog.csdn.net/Oven_maizi/article/details/126804404 1 vscode插件 安装 安装红框中的两个 2 flutter sdk 安装 dart sdk 包含在flutter sdk 里面&#xff0c;路径&#xff1a;flutter_windows_3.24.1-stable\flutter\bin\cache\dart-sdk 方式1&#xff1a; 通过…

[001-07-001].Redis7缓存双写一致性之更新策略探讨

1、面试题&#xff1a; 1.只要使用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;只要是双写&#xff0c;就存在数据一致性问题&#xff0c;那么是如何解决数据一致性问题的2.双写一致性&#xff0c;你先动缓存redis还是数据库MySQL&#xff0c;哪一个…

Python爬虫案例四:爬取某个博主的所有文章保存成PDF格式

引入&#xff08;将图片保存成PDF格式&#xff09;&#xff1a; 测试链接&#xff1a; https://zq.bookan.com.cn/?tdetail&id21088&ct1&is31042341&rid4658&#xff08;图书馆图片保存PDF&#xff09;&#xff0c;前提是装库&#xff0c;pip install img2pdf…

IDEA如何将某个文件夹内的多个module合并到一个大的module内

效果&#xff1a; 初始 方法 Ctrl shift Alt S 打开 project structure 导入module 将这个大文件夹作为新的module导入 效果图 完事儿

C#上位机采用数据库操作方式对Excel或WPS表格进行读取操作

C#采用数据库操作方式对Excel或WPS表格进行读取操作 1、创建连接字符串并编写一个进行数据库操作的方法 public class OleDbHelper{//创建连接字符串private static string connString "ProviderMicrosoft.ACE.OLEDB.12.0;Data Source{0};" "Extended Propert…