【Go】Go环境搭建与第一个程序

Go环境搭建与第一个程序

前言

这篇是 Go基础合集 的第一篇学习笔记,这次整理的是 Go 语言的环境搭建和第一个程序。

想学一门新语言,第一步是什么?当然是把环境搭起来!很多人卡在环境配置这一步就放弃了,其实 Go 的安装配置非常简单,比 Java 配置JAVA_HOMECLASSPATH那一套省心多了。

今天我们就从零开始,把 Go 环境搭好,跑通第一个Hello World,顺便把Go Modules也讲清楚。

🏠个人主页:山沐与山


文章目录

  • 一、Go语言简介
  • 二、环境安装
  • 三、环境变量配置
  • 四、第一个Go程序
  • 五、Go Modules详解
  • 六、常见问题
  • 七、总结

一、Go语言简介

1.1 为什么学Go?

你可能会问:编程语言这么多,为什么要学 Go?

看看这些用 Go 写的项目你就明白了:DockerKubernetesetcdPrometheus… 云原生时代的半壁江山都是 Go 打下来的。

Go 语言有几个特点让它脱颖而出:

特点说明
语法简单关键字只有25个,学习曲线平缓
编译速度快大型项目也能秒级编译
天生支持并发goroutine+channel,并发编程简单高效
静态类型编译期检查类型错误,运行时更安全
单一可执行文件编译后就一个二进制文件,部署超方便

1.2 Go的版本选择

Go 的版本命名很简单:go1.x.y,比如go1.21.5

建议:选择最新的稳定版本,目前推荐go1.21go1.22

为什么?因为 Go 团队承诺向后兼容,新版本只会更好用,不会破坏老代码。


二、环境安装

2.1 下载安装包

去官网下载:https://go.dev/dl/

根据你的操作系统选择对应版本:

操作系统文件类型示例
Windows.msigo1.21.5.windows-amd64.msi
macOS.pkggo1.21.5.darwin-amd64.pkg
Linux.tar.gzgo1.21.5.linux-amd64.tar.gz

2.2 Windows安装

下载.msi文件后双击运行,一路 Next 就行。

默认安装路径是C:\Go,建议保持默认,省得后面配置麻烦。

安装完成后,打开命令行验证:

go version

输出:

go version go1.21.5 windows/amd64

看到版本号就说明安装成功了。

2.3 macOS安装

方法一:下载.pkg安装包

双击运行,按提示安装即可,默认安装到/usr/local/go

方法二:使用 Homebrew(推荐)

brewinstallgo

验证安装:

go version

2.4 Linux安装

# 下载安装包wgethttps://go.dev/dl/go1.21.5.linux-amd64.tar.gz# 解压到 /usr/localsudotar-C /usr/local -xzf go1.21.5.linux-amd64.tar.gz# 验证/usr/local/go/bin/go version

三、环境变量配置

3.1 核心环境变量

Go 有几个重要的环境变量:

变量说明示例值
GOROOTGo 安装目录/usr/local/go
GOPATH工作目录(存放依赖、编译产物)$HOME/go
GOPROXY模块代理地址https://goproxy.cn,direct
GO111MODULE是否启用 Go Moduleson

3.2 配置步骤

Windows

右键"此电脑" → 属性 → 高级系统设置 → 环境变量,添加:

GOROOT=C:\Go GOPATH=%USERPROFILE%\go GOPROXY=https://goproxy.cn,direct

别忘了把%GOROOT%\bin加到PATH里。

macOS/Linux

编辑~/.bashrc~/.zshrc

# Go 环境变量exportGOROOT=/usr/local/goexportGOPATH=$HOME/goexportPATH=$PATH:$GOROOT/bin:$GOPATH/bin# 国内代理,下载依赖更快exportGOPROXY=https://goproxy.cn,direct

执行source ~/.bashrc使配置生效。

3.3 验证配置

goenv

这个命令会列出所有 Go 环境变量。重点检查:

goenvGOROOT goenvGOPATH goenvGOPROXY

四、第一个Go程序

4.1 创建项目

# 创建项目目录mkdirhellocdhello# 初始化模块go mod init hello

go mod init会创建一个go.mod文件,这是 Go Modules 的核心文件。

4.2 编写代码

创建main.go文件:

packagemainimport"fmt"funcmain(){fmt.Println("Hello, Go!")}

代码来自code/main.go

来分析一下这几行代码:

代码说明
package main声明包名,main包是程序入口
import "fmt"导入标准库的fmt包,用于格式化输出
func main()程序入口函数,必须在main包中
fmt.Println()打印输出并换行

4.3 运行程序

方法一:直接运行

go run main.go

输出:

Hello, Go!

方法二:编译后运行

# 编译go build -o hello# 运行./hello

两种方式的区别是什么?

命令说明适用场景
go run编译并立即运行,不生成可执行文件开发调试
go build只编译,生成可执行文件部署发布

4.4 代码结构说明

一个最简单的 Go 程序需要什么?

hello/ ├── go.mod # 模块定义文件 └── main.go # 程序入口

看到没?就两个文件,比 Java 的src/main/java/...那一套简洁多了。


五、Go Modules详解

5.1 什么是Go Modules?

Go 1.11之前,Go 的依赖管理很痛苦——所有代码都得放在GOPATH/src下面。

现在有了Go Modules,你可以在任意目录创建项目,依赖管理也变得现代化了。

5.2 核心文件

文件说明
go.mod模块定义,记录模块名和依赖列表
go.sum依赖校验,记录依赖的版本和哈希值

看看go.mod长什么样:

module hello go 1.21

当你添加依赖后,它会变成这样:

module hello go 1.21 require ( github.com/gin-gonic/gin v1.9.1 github.com/go-redis/redis/v8 v8.11.5 )

5.3 常用命令

命令说明
go mod init <模块名>初始化模块
go mod tidy整理依赖(添加缺失的、删除多余的)
go mod download下载依赖到本地缓存
go mod vendor将依赖复制到vendor目录
go get <包名>添加/更新依赖

5.4 添加依赖示例

假设我们要用gin框架:

go get github.com/gin-gonic/gin

然后就可以在代码里用了:

packagemainimport"github.com/gin-gonic/gin"funcmain(){r:=gin.Default()r.GET("/",func(c*gin.Context){c.JSON(200,gin.H{"message":"Hello, Gin!"})})r.Run(":8080")}

执行go mod tidy会自动整理依赖。


六、常见问题

6.1 问题1:go: command not found

问题描述:命令行输入go提示找不到命令。

原因分析

  1. Go 没有安装成功
  2. 环境变量没配置正确

解决方案

# 检查 Go 是否安装ls/usr/local/go/bin/go# 检查 PATHecho$PATH|grepgo

确保$GOROOT/binPATH中。

6.2 问题2:下载依赖很慢或超时

问题描述:执行go get时很慢或报错timeout

原因分析:默认从proxy.golang.org下载,国内访问慢。

解决方案

设置国内代理:

goenv-wGOPROXY=https://goproxy.cn,direct

6.3 问题3:go mod init报错

问题描述:执行go mod init时报错。

原因分析

  1. 当前目录已经有go.mod文件
  2. 没有给模块名

解决方案

# 正确用法go mod init myproject# 如果是 GitHub 项目go mod init github.com/username/myproject

6.4 问题4:IDE没有代码提示

问题描述:用 VS Code 或 GoLand 写代码没有智能提示。

解决方案

VS Code:安装 Go 插件,然后按Ctrl+Shift+P,执行Go: Install/Update Tools,全选安装。

GoLand:确保GOROOT配置正确,File → Settings → Go → GOROOT。


七、总结

本文介绍了 Go 语言环境搭建的完整流程,重点包括:

  1. 环境安装:下载安装包,一路 Next
  2. 环境变量:配置GOROOTGOPATHGOPROXY
  3. 第一个程序go mod init+go run
  4. Go Modules:现代化的依赖管理

关键命令速查表

命令说明
go version查看版本
go env查看环境变量
go mod init初始化模块
go run编译并运行
go build编译
go mod tidy整理依赖
go get添加依赖

下一篇:我们将学习 Go 的变量、常量和基本类型,敬请期待!


热门专栏推荐

  • Agent小册
  • 服务器部署
  • Java基础合集
  • Python基础合集
  • Go基础合集
  • 大数据合集
  • 前端小册
  • 数据库合集
  • Redis 合集
  • Spring 全家桶
  • 微服务全家桶
  • 数据结构与算法合集
  • 设计模式小册
  • 消息队列合集

等等等还有许多优秀的合集在主页等着大家的光顾,感谢大家的支持

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😊
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🙏
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🌟

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

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

相关文章

AI 外设接入 + 本地模型指定路径部署,FlowyAIPC v4.0.3 正式发布

【2026年01月06日】FlowyAIPC 全新 v4.0.3 版本正式发布&#xff0c;本次更新重点围绕「会议纪要反馈机制」「本地模型部署位置」以及「AI鼠标外设」同时对部分硬件配置下的功能策略进行了调整。 本地模型支持自定义部署位置 模型不再被“固定在一个路径里” 针对本地模型体…

STM32出现FLASH擦除失败异常现象分析及解决方法

目录 前言&#xff1a; 先说结论&#xff1a; 一、问题分析 二、异常排查 三、发现原因&#xff01; 四、如果这篇文章能帮助到你&#xff0c;请点个赞鼓励一下吧ξ( ✿&#xff1e;◡❛)~ 前言&#xff1a; 长颈鹿最近在使用STM32G070单片机进行项目开发&#xff0c;过程…

使用keychron Launcher改 K3Max 的功能键

解决问题的关键是发现并描述清楚问题 买了一个 K3Max 有一个痛点&#xff0c;每次按 F12 打开浏览器控制台&#xff0c;需要 fnF12。用起来非常累 看别人描述“而在我的日常工作中&#xff0c;常用的是F1&#xff5e;F12&#xff0c;期望F1~F12功能键和多媒体功能键的位置互换…

RAG(检索增强生成)架构与原理:告别LLM“幻觉”的秘密武器

写在前面的话 RAG是什么&#xff1f;如果你还不清楚或是一知半解&#xff0c;不要紧&#xff0c;如果看完这篇文章&#xff0c;你还不会&#xff0c;算我输&#xff01; 在人工智能飞速发展的今天&#xff0c;大型语言模型&#xff08;LLM&#xff09;以其强大的文本生成能力&a…

IEC-60958

IEC 60958 IEC 60958是一种传递数字音频的接口规范&#xff0c;相比I2S&#xff0c;IEC60958通过一根线同时传递时钟信号和数据信号。 IEC 60958在传输数据时使用双相符号编码(Biphase Mark Code)&#xff0c;简称BMC&#xff0c;属于一种相位调制(phase modulation)的编码方法…

RAG分块完全指南:7种核心策略详解,让你的大模型效果翻倍

本文详解RAG系统中分块(Chunking)策略这一关键环节&#xff0c;解析了7种主流分块方法&#xff1a;固定大小、语义、递归、文档、智能体、句子和段落分块。文章指出不存在"万能"策略&#xff0c;建议从512 tokens搭配10-15%重叠率开始&#xff0c;通过调试参数优化&a…

(加交叉验证)基于GPR的数据多变量回归预测 (多输入单输出)

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 基于高斯过程回归GPR的数据多变量回归预测 (多输入单输出)交叉验证 程序已经调试好&#xff0c;无需更改代码替换数据集即可运行&#xff01;&#xff01;&#xff01;数据格式为excel&#xff01; 本程序…

大模型在自动驾驶中的应用:从VLA到端到端技术全解析

文章介绍了大模型在自动驾驶领域的应用&#xff0c;重点解析了VLA&#xff08;视觉-语言-动作&#xff09;技术与端到端的关系&#xff0c;并阐述了两种VLA实现方案&#xff1a;两阶段&#xff08;大模型Diffusion&#xff09;和单阶段&#xff08;纯大模型&#xff09;。同时提…

专科生必看!8个降AI率工具,高效避坑指南

专科生必看&#xff01;8个降AI率工具&#xff0c;高效避坑指南 AI降重工具&#xff1a;高效避坑的必备利器 随着人工智能技术的快速发展&#xff0c;越来越多的专科生在撰写论文时开始使用AI工具进行辅助。然而&#xff0c;AI生成的内容往往存在明显的“AI痕迹”&#xff0c;不…

JavaWeb相关环境安装

这篇博客我们讲一下JavaWeb相关得环境安装&#xff0c;用来后续完成前后端的项目部署。 1&#xff0c;JDK 1&#xff0c;下载安装包 下载安装包大家可以去官网进行下载&#xff0c;为了方便起见大家可以直接通过我提供的链接进行下载&#xff1a;JDK安装包&#xff0c;将下载后…

04|交付经理真正的 KPI 只有一个:可被接受的结果

在很多公司里&#xff0c;交付经理的 KPI 看起来非常“丰富”。 项目按期率里程碑完成率客户满意度验收通过率投诉数量 但如果你真的在一线做过交付&#xff0c;就会慢慢意识到一件事&#xff1a;这些 KPI&#xff0c;大多数只是“结果的影子”&#xff0c; 而不是交付真正被评…

小白也能学会!2024-2025年RAG系统高精度实现指南,企业级应用必备收藏

本文系统分析了企业级RAG系统面临的五大挑战&#xff0c;包括历史数据过时、文档分块破坏上下文、向量检索局限、图表理解瓶颈和流程缺乏灵活性。针对这些问题&#xff0c;文章提出了多种解决方案&#xff1a;选择合适的LLM和嵌入模型、建立评估体系、采用混合检索与重排序技术…

‌为什么供应商报价有13%和3%两种增值税?‌

为什么供应商报价有13%和3%两种增值税&#xff1f;‌ 13%税率‌&#xff1a;适用于‌一般纳税人‌销售‌货物、加工修理修配劳务、有形动产租赁‌等业务。例如&#xff1a;销售手机、电脑、机械设备、汽车配件、工业原材料等。 3%征收率‌&#xff1a;适用于‌小规模纳税人‌的…

参数高效微调三剑客:LoRA、MoLoRA与MoR1E的深度比较与应用指南

大模型微调的技术演进 在大型语言模型(LLM)时代&#xff0c;全参数微调(Full Fine-tuning)面临三大挑战&#xff1a; 计算资源消耗&#xff1a;微调百亿参数模型需昂贵GPU集群存储开销&#xff1a;每个下游任务需保存完整模型副本灾难性遗忘&#xff1a;微调可能损害模型原有…

of 的发音?弱读最常见/əv/

of 的发音取决于语境&#xff0c;常见有两种读法。 1️⃣ 最常见&#xff08;弱读&#xff0c;口语 / 学术汇报里几乎都用这个&#xff09; of → /əv/ 接近中文&#xff1a;“呃v / əv”&#xff08;很轻&#xff09; 例子&#xff1a; one of them → /wʌn əv em/ a l…

基于1D-CNN的数据多变量回归预测 (多输入单输出)

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 基于一维卷积神经网络(1D-CNN)的数据多变量回归预测 (多输入单输出) 程序已经调试好&#xff0c;无需更改代码替换数据集即可运行&#xff01;&#xff01;&#xff01;数据格式为excel&#xff01; 本程序…

PyQt5 解决弹窗后快捷键失效问题

import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu, QAction, QMessageBox from PyQt5.QtCore import Qt, QEvent, QTimerclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("菜单快捷键焦点保…

【必收藏】突破传统RAG瓶颈:Deep Thinking RAG架构详解与实战指南

Deep Thinking RAG是一种将RAG与Agent技术融合的新型架构&#xff0c;突破了传统RAG的局限性。它通过四个智能模块&#xff08;规划代理、检索监督者、多阶段检索漏斗、策略代理&#xff09;实现从线性链到循环图的跃迁&#xff0c;支持多跳推理、动态知识边界和自适应检索策略…

基于(SVM-RFE-BP)支持向量机递归特征消除特征选择算法结合BP神经网络多变量回归预测(多输入单输出)

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 基于(SVM-RFE-BP)支持向量机递归特征消除特征选择算法结合BP神经网络多变量回归预测(多输入单输出) 采用SVM-RFE支持向量机递归特征消除特征选择对原始特征进行特征选择&#xff01;随后在结合BP进行回归预…

若依工作流模型管理模块 - 需求分析+设计文档+接口文档

若依工作流模型管理模块 - 需求分析设计文档接口文档 一、需求分析 1. 核心业务背景 该模块是若依&#xff08;RuoYi-Vue-Plus&#xff09;框架集成Activiti工作流引擎的核心模块&#xff0c;聚焦流程模型全生命周期管理&#xff0c;解决从模型创建、编辑、部署到导出、转换…