首页 > 其他分享 >go项目zero中自定义sdk的引用与使用规范

go项目zero中自定义sdk的引用与使用规范

时间:2025-01-17 17:30:32浏览次数:3  
标签:依赖 自定义 tidy zero SDK go mod sdk

在 Go 项目中,`go mod tidy` 命令会自动删除没有直接引用的依赖。如果你的项目中某个 SDK 被引用但是没有在业务代码中直接使用,`go mod tidy` 可能会将其清理掉,因为它被认为是"未使用"的依赖。

如果你希望保留这些依赖(例如某些 SDK),可以采取以下几种方法:

### 1. 显式调用 SDK 中的功能


确保你的代码中至少有一个地方使用了该 SDK 中的某个功能或方法。即使只是调用它的初始化函数或一些简单的接口,也能让 Go 判断该依赖是被使用的,避免它在执行 `go mod tidy` 时被清理掉。

go mod tidy

例如:```go

package main

import (
    "fmt"
    "example.com/some-sdk"
)

func main() {
    // 触发 SDK 的初始化或调用其功能
    sdk.Init()  // 这行代码可以确保 SDK 不会被清理掉
    fmt.Println("SDK Initialized!")
}


```

### 2. 使用 Go 语言的 `//go:build` 标记
如果你希望某些代码仅在特定条件下编译(例如在某些构建标签下才使用该 SDK),你可以使用 `//go:build` 标记,确保 SDK 在特定条件下被引用。```go

//go:build sdk_needed

package main

import (
    "fmt"
    "example.com/some-sdk"
)

func main() {
    sdk.Init()
    fmt.Println("SDK Initialized!")
}


```

然后在执行 `go build` 时,指定 `-tags` 来包含该构建标签:

```bash

go build -tags sdk_needed


```

### 3. 使用 `replace` 来强制保留依赖
在 `go.mod` 文件中,你可以通过 `replace` 指令强制 Go 保留某些依赖。例如:```go

module your-module-name

go 1.18

require (
    example.com/some-sdk v1.0.0
)

replace example.com/some-sdk => example.com/some-sdk v1.0.0


```

虽然这种方法不常见,但它可以确保 Go 保留该依赖,即使它在代码中没有被直接使用。

### 4. 临时保留 SDK
如果你暂时不想执行 `go mod tidy` 干预该 SDK 的依赖,可以通过以下方法手动避免清理它:

1. 在业务代码中,至少保留一个对该 SDK 的引用。
2. 在 `go.mod` 中手动锁定版本,确保该依赖不会被清理。

### 5. 手动编辑 go.mod
作为一种最后的手段,虽然不推荐,但你可以直接在 `go.mod` 文件中保留某个依赖,防止它被自动清理。确保该依赖在 `require` 部分存在,并且版本被锁定。

### 总结
- 确保 SDK 在业务代码中被直接引用,这样 `go mod tidy` 就不会清理它。
- 使用 `//go:build` 或构建标签,确保 SDK 只有在特定场景下才会被清理。
- 如果 SDK 没有直接使用,可以手动通过 `replace` 强制 Go 保留该依赖。

这些方法可以帮助你避免 SDK 被 `go mod tidy` 清理掉,同时又保持项目的整洁性。

标签:依赖,自定义,tidy,zero,SDK,go,mod,sdk
From: https://blog.csdn.net/qq_33665793/article/details/145211198

相关文章

  • MySql操作指南3--使用 ORM (GORM) 访问 MySQL
    昨天发布的内容,使用原生写法来访问mysql数据库,然而,在实际项目中,这种写法,不仅需要写sql语句来实现表的增删改查,可维护性低,不易实现对象化和组件化,今天风云用ORM对象关系映射方式再实现一遍。每种语言都有自己的ORM库,golang里叫GORM。先来介绍一下它的概念ORM(对象关系映射)的意......
  • 2025-01-17:构成整天的下标对数目Ⅰ。用go语言,给定一个整数数组 hours,其中每个元素表示
    2025-01-17:构成整天的下标对数目Ⅰ。用go语言,给定一个整数数组hours,其中每个元素表示以小时为单位的时间,要求返回一个整数,表示满足条件i<j且hours[i]+hours[j]为24的整数倍的下标对(i,j)的数量。这里,整天被定义为时间持续的时长是24小时的整数倍。例如,1天......
  • YOLOv11改进策略【Neck】| NeurIPS 2023 融合GOLD-YOLO颈部结构,强化小目标检测能力
    一、本文介绍本文主要利用GOLD-YOLO中的颈部结构优化YOLOv11的网络模型。GOLD-YOLO颈部结构中的GD机制借鉴了全局信息融合的理念,通过独特的模块设计,在不显著增加延迟的情况下,高效融合不同层级的特征信息。将其应用于YOLOv11的改进过程中,能够使模型更有效地整合多尺度特......
  • 【Django DRF Apps】从零搭建一个上传图片app
    DjangoRESTFramework图片上传app完整指南以下是一个通过DjangoRESTFramework(DRF)实现图片上传功能的完整示例,涵盖从环境配置到功能实现的所有步骤,同时增加了功能点和知识点的解析,便于理解与扩展。功能点图片上传功能:实现通过API接口上传图片并保存到服务器。......
  • SQL-按自定义格式进行编号的SQL自定义函数.090119
    生成格式如:DT.EMP.0000000001的自增emp_id,加入EmpBaseINfo表中。--生成格式如DT.EMP.0000000001  【Vegas Add】ALTERFUNCTION[dbo].[Get_EmpBaseInfo_AccountID](@RowIDasint)RETURNSnvarchar(50) as begin    declare@oidnvarchar(50)    dec......
  • MongoDB 常用指令(详细)
    #MongoDB常用指令##基础命令###启动与连接```bash#启动MongoDB服务mongod#连接MongoDB客户端mongo```###数据库操作```bash#查看当前使用的数据库db#列出所有数据库showdbs#切换或创建数据库use<database_name>#删除当前数据库db.dropDatabase()```##集合操作`......
  • Django Admin 实战:实现 ECS 集群批量同步功能
    引言在管理大规模AWSECS(ElasticContainerService)集群时,保持本地数据库与AWS实际状态的同步是一项关键任务。手动更新既耗时又容易出错,因此自动化这个过程变得尤为重要。本文将介绍如何利用DjangoAdmin的自定义动作功能来实现ECS集群的批量同步操作,从而大幅......
  • Python+Django的社区爱心捐赠(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的社区爱心捐赠(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数据库......
  • Python+Django的老年群体安全用药管理系统(角色:用户、医生、药师、管理员)(Pycharm Flas
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的老年群体安全用药管理系统(角色:用户、医生、药师、管理员)(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端......
  • 使用 Golang 编译 Linux 可运行文件
    Golang(或Go)是一种开源编程语言,因其简单、高效、并发编程支持而备受欢迎。本文将详细介绍如何使用Golang编译生成可以在Linux上运行的可执行文件。一、安装Golang1.1下载Golang从Golang官方网站下载适合你操作系统的安装包:Golang下载页面1.2安装Golang在Ubuntu......