当前位置: 首页 > ds >正文

go环境配置

下载对应版本的 go 版本

https://go.dev/dl/

配置 vim ~/.zshrc

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

source ~/.zshrc

>>>>>> go version

goland 配置:

🔍 一、什么是GOPATH?

GOPATH 是旧的项目结构管理方式(Go Modules 出现前),它要求所有代码必须放在 $GOPATH/src 目录下,并通过 go get 下载依赖。

  • 默认 GOPATH 是 ~/go。
  • 所有第三方依赖都放在 ~/go/pkg,所有项目放在 ~/go/src。
  • 缺点:代码必须放在固定位置,很不灵活。

✅ 二、什么是Go Modules?(Go 1.11+ 推荐使用)

Go Modules 是 Go 推荐的依赖管理方式,从 Go 1.16 开始默认启用。

优点包括:

  • 不需要依赖 GOPATH。
  • 支持多项目、多模块开发。
  • 每个项目可以独立管理依赖(go.mod 就像 Python 的 requirements.txt)。有 go.mod 就是表示 go modules 了
➜  go_study git:(main) ✗ go mod init go_study 
go: creating new go.mod: module go_study
go: to add module requirements and sums:go mod tidy>>>>>go mod init gin-api-template (初始化项目)

含义:

  • 创建了当前项目的模块管理文件 go.mod。
  • go_study 是你的模块名(可以是本地名,也可以是 Git 地址)。
  • 这相当于 npm init 或 pip init。

简单的gin 使用

安装依赖

go mod tidy>>>>>go get github.com/gin-gonic/gin 
命令作用说明
go get github.com/gin-gonic/gin显式添加某个依赖会将 gin 添加到 go.mod 的 require 中,并下载到 go.sum
go mod tidy整理依赖(推荐常用)自动添加“用到了但未声明”的依赖,删除“声明了但没用”的依赖

你没有写import:

  • ❌ 执行 go mod tidy:什么都不干(因为没用到)。
  • ✅ 执行 go get:它会强行添加这个依赖(即使没用到)。

main.go

package mainimport ("fmt""go_study/gin_test"
)func main() {fmt.Println("Hello, Go Modules!")gin_test.GinHttp()
}

gin_test/gin_testa.go

package gin_testimport "github.com/gin-gonic/gin"func GinHttp() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong",})})r.Run(":8080")
}

运行 main.go 就可以看到了。

Go 导包与函数调用行为

1.多个文件的组织方式

在 Go 中,同一个目录下的多个 .go 文件,只要 package 名一样(如 package gin_test)就会视为同一个包,这些文件的内容会被编译器自动合并成一个整体。

也就是说:

// gin_testa.go
package gin_testfunc GinHttp() {// 实现 A
}// gin_testb.go
package gin_testfunc GinHttp() {// 实现 B
}

👆这种写法是不允许的,编译时会报错:GinHttp redeclared in this block,因为你定义了两个同名函数在同一个包里,Go 是静态强类型语言,不允许重复定义同名标识符。

✅ 和 Python 的对比(重要)

对比项GoPython
包管理编译期检查,结构严格动态加载,结构灵活
导入行为显式导入包名后调用函数可以直接导入函数/类
文件作用域同一包下自动合并多个 .go 文件每个 .py 文件都是独立模块
  • Go 不像 Python 动态导入模块那样“运行到才执行”,而是编译前统一构建;
  • 同一个 package 下的多个文件函数名不能重复;
  • 如果你希望有两个同名函数,请把它们放在不同 package下;
  • 合理使用模块和包组织,是 Go 项目整洁的关键。

Go 是一个 面向组合而不是面向继承 的语言。它没有传统 OOP 的 class 关键字,但你完全可以通过 struct + method(方法) 实现“类”的大多数功能。

特性Go 中的实现
用 struct 替代
方法func (r *Receiver) Method()
构造函数自己写一个返回 struct 的函数
继承不支持,使用组合代替
接口内嵌接口 + duck typing(非常强)
多态接口实现自动判定

配置热重载

air 是 Go 社区最流行的热重载工具,类似于 Python 中的 uvicorn --reload。


go install github.com/air-verse/air@latest

⚠️ 安装后需将 $GOPATH/bin 添加到你的 PATH:

# 确保 GOPATH/bin 加入 PATH
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc
source ~/.zshrc# 验证 air 安装成功
which air
air -v

第一步:在项目根目录运行一次(生成配置文件):

air init

这会在当前目录生成一个 .air.toml 配置文件。

第二步:运行热更新服务

在项目根目录执行:

air

这会自动监控你的 Go 文件,一旦你修改代码,它会自动重启服务(像 FastAPI 的 uvicorn --reload 一样)。

http://www.xdnf.cn/news/10633.html

相关文章:

  • 深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制
  • UNION 与 UNION ALL 的区别
  • DAY 36 超大力王爱学Python
  • 设计模式——外观设计模式(结构型)
  • 力扣上C语言编程题
  • LangGraph(八)——LangGraph运行时
  • K3s简介、实战、问题记录
  • STM32F407寄存器操作(ADC非连续扫描模式)
  • 操作系统学习(九)——存储系统
  • AI 代理框架:使用正确的工具构建更智能的系统
  • 2025.6.1总结
  • 仓颉鸿蒙开发:制作底部标签栏
  • python训练营打卡第41天
  • 启动你的RocketMQ之旅(七)-Store存储原理
  • MySQL优化全链路实践:从慢查询治理到架构升级
  • 邮件验证码存储推荐方式
  • 前端基础学习html+css+js
  • 计算机网络第1章(上):网络组成与三种交换方式全解析
  • 【IC】多角多模式信号完整性优化
  • VBA数据库解决方案二十:Select表达式From区域Where条件Order by
  • 基于React + TypeScript构建高度可定制的QR码生成器
  • 鸿蒙OSUniApp结合机器学习打造智能图像分类应用:HarmonyOS实践指南#三方框架 #Uniapp
  • MCU SoC
  • Shape and boundary-aware
  • Ubuntu配置中文语言
  • GoldenEye
  • 机器学习-ROC曲线​​ 和 ​​AUC指标
  • 内存管理 : 06 内存换出
  • 不使用绑定的方法
  • 剑指offer hot100 第三周