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.pswp.cn/diannao/85319.shtml

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

相关文章

AI Agent智能体:底层逻辑、原理与大模型关系深度解析·优雅草卓伊凡

AI Agent智能体:底层逻辑、原理与大模型关系深度解析优雅草卓伊凡 一、AI Agent的底层架构与核心原理 1.1 AI Agent的基本构成要素 AI Agent(人工智能代理)是一种能够感知环境、自主决策并执行行动的智能系统。其核心架构包含以下关键组件…

【手搓一个原生全局loading组件解决页面闪烁问题】

页面闪烁效果1 页面闪烁效果2 封装一个全局loading组件 class GlobalLoading extends HTMLElement {constructor() {super();this.attachShadow({ mode: open });}connectedCallback() {this.render();this.init();}render() {this.shadowRoot.innerHTML <style>.load…

unix/linux source 命令,其高级使用

就像在物理学中,掌握了基本定律后,我们可以开始研究更复杂的系统和现象,source 的高级用法也是建立在对其基本行为深刻理解之上的。 让我们一起探索 source 的高级应用领域: 1. 条件化加载 (Conditional Sourcing) 根据某些条件来决定是否 source 一个文件,或者 source…

DexGarmentLab 论文翻译

单个 专家 演示 装扮 15 任务 场景 2500+ 服装 手套 棒球帽 裤子 围巾 碗 帽子 上衣 外套 服装-手部交互 捕捉 摇篮 夹紧 平滑 任务 ...... 投掷 悬挂 折叠 ... 多样化位置 ... 多样化 变形 ... 多样化服装形状 类别级 一般化 类别级(有或没有变形) 服装具有相同结构 变形 生…

WPF-Prism学习笔记之 “导航功能和依赖注入“

新建空白模板(Prism) 新建好后会有自动创建ViewModels和Views 在"MainWindow.xaml"文件里面标题去绑定了一个属性"Title"&#xff0c;而"MainWindowViewModel.cs"里面继承一个非常重要的"BindbleBase"(prism框架里面非常重要的)。所以…

《C++初阶之入门基础》【C++的前世今生】

【C的前世今生】目录 前言&#xff1a;---------------起源---------------一、历史背景二、横空出世---------------发展---------------三、标准立世C98&#xff1a;首个国际标准版本C03&#xff1a;小修订版本 四、现代进化C11&#xff1a;现代C的开端C14&#xff1a;对C11的…

YOLOv5-入门篇笔记

1.创建环境 conda create -n yolvo5 python3.8 去pytorch.org下载1.8.2的版本。 pip --default-timeout1688 install torch1.8.2 torchvision0.9.2 torchaudio0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111 github上下载yolov5的zip pip --def…

【PostgreSQL 03】PostGIS空间数据深度实战:从地图服务到智慧城市

PostGIS空间数据深度实战&#xff1a;从地图服务到智慧城市 关键词 PostGIS, 空间数据库, 地理信息系统, GIS, 空间查询, 地理分析, 位置服务, 智慧城市, 空间索引, 坐标系统 摘要 PostGIS是PostgreSQL的空间数据扩展&#xff0c;它将普通的关系数据库转变为强大的地理信息系统…

科技修真的解决方案

“科技修真”是一个结合现代科技与修真&#xff08;玄幻&#xff09;元素的创新概念&#xff0c;通常出现在科幻或玄幻文学作品中&#xff0c;但也可能指代现实中的科技与传统文化、超自然理念的融合探索。以下是几种可能的“科技修真”方案&#xff0c;涵盖技术实现、文化融合…

STM32的HAL编码流程总结(上部)

目录 一、GPIO二、中断系统三、USART串口通信四、I2C通信五、定时器 一、GPIO 1.选择调试类型 在SYS中Debug选择Serial Wire模式 2.选择时钟源 在RCC中将HSE和LSH都选择为内部晶振 3.时钟树配置 4.GPIO配置 在芯片图上选择开启的引脚和其功能 配置引脚的各自属性 5.工…

java直接获取MyBatis将要执行的动态sql命令(不是拦截器方式)

目录 前言 一. 准备数据 1. 传输过来的json条件数据 2. mybatis 配置的动态sql 3. 想要的最终会执行的sql并返回给页面展示 二. 实现方式 三. 最终代码 前言 1.在平常开发过程中,MyBatis使用时非常多的,一般情况下我们只需要在控制台看看MyBatis输出的日志,要不就是实…

机器学习算法-决策树

今天我们用一个 「相亲决策」 的例子来讲解决策树算法&#xff0c;保证你轻松理解原理和实现&#xff01; &#x1f333; 决策树是什么&#xff1f; 决策树就像玩 「20个问题」猜谜游戏&#xff1a; 你心里想一个东西&#xff08;比如「苹果」&#xff09; 朋友通过一系列问题…

2025——》VSCode Windows 最新安装指南/VSCode安装完成后如何验证是否成功?2025最新VSCode安装配置全攻略

1.VSCode Windows 最新安装指南: 以下是 2025 年 Windows 系统下安装 Visual Studio Code(VSCode)的最新指南,结合官方文档与实际操作经验整理而成: 一、下载官方安装包: 1.访问官网: 打开浏览器,进入 VSCode 官方下载页面https://code.visualstudio.com/Download 2…

【Elasticsearch】suggest

在Elasticsearch中&#xff0c;suggest 是一个非常强大的功能&#xff0c;用于实现自动补全、拼写纠错和模糊搜索等功能。它可以帮助用户更快地找到他们想要的内容&#xff0c;同时提升搜索体验。以下是关于 suggest 的详细使用方法和常见场景。 1\. Suggest 的基本概念 sugges…

[SAP] 如何查询当前屏幕的Tcode?

事务代码Tcode是SAP中到达特定屏幕的快捷路径 如何查询以下屏幕的事务码Tcode&#xff1f; 要浏览当前所使用的屏幕的事务码&#xff0c;可以选择System | Status 这里的事务代码是[VA22]&#xff0c;它是Change Quotation的事务代码

PostgreSQL的扩展 dblink

PostgreSQL的扩展 dblink dblink 是 PostgreSQL 的一个核心扩展&#xff0c;允许在当前数据库中访问其他 PostgreSQL 数据库的数据&#xff0c;实现跨数据库查询功能。 一、dblink 扩展安装与启用 1. 安装扩展 -- 使用超级用户安装 CREATE EXTENSION dblink;2. 验证安装 -…

ADB推送文件到指定路径解析

您执行的命令 adb push ota.zip /sdcard/Download 中&#xff0c;目标路径 /sdcard/Download 是您显式指定的&#xff0c;因此 ADB 会直接将文件推送到此位置。具体过程如下&#xff1a; 1. 命令结构解析 adb push&#xff1a;ADB 的推送指令。ota.zip&#xff1a;本地计算机上…

Linux 内核中 skb_orphan 的深度解析:从版本差异到核心机制

引言 在 Linux 内核网络子系统中,struct sk_buff(简称 skb)是管理网络数据包的核心数据结构。skb_orphan 作为其生命周期管理的关键函数,负责切断 skb 与所属 socket 的关联,确保数据包在复杂处理流程中的独立性。本文将从代码实现、版本差异、使用场景等多个维度,深入解…

03.MySQL表的操作详解

MySQL表的操作详解 MySQL 表的操作概述创建表 2.1 创建表的基本语法查看表结构修改表 4.1 新增列 4.2 修改列属性 4.3 修改列名 4.4 修改表名 4.5 删除列删除表 1. MySQL表的操作概述 MySQL表的操作是数据库开发和管理中的核心内容&#xff0c;主要涉及**数据定义语言&#…

Flink系列文章列表

把写的文章做一个汇总&#xff0c;会陆续更新的。 Flink流处理原理与实践&#xff1a;状态管理、窗口操作与容错机制-CSDN博客