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

Golang编写客户端SDK,并开源发布包到GitHub,供其他项目import使用

目录

  • 编写客户端SDK,并开源发布包到GitHub
    • 1. 创建 GitHub 仓库
    • 2. 构建项目,编写代码
      • Go 代码示例:
      • 项目目录结构展示:
    • 3. 提交代码到 GitHub仓库
    • 4. 发布版本
    • 5. 现在其他人可以引用使用你的模块包了

编写客户端SDK,并开源发布包到GitHub

如果希望其他项目能够使用该SDK,可以将该SDK打包为一个Go模块,并将其发布到Go模块仓库中。这将使其他项目能够通过Go的模块依赖机制来使用该SDK。可以轻松地引用和使用你的代码。

1. 创建 GitHub 仓库

  1. 登录到你的 GitHub 帐户。
  2. 在 GitHub 主页点击右上角的加号(+),然后选择 “New repository”(新建仓库)。
  3. 给你的仓库起一个名称,选择是公共的,然后点击 “Create repository”(创建仓库)按钮。
  • 克隆项目到本地:使用 git clone 命令来克隆仓库到本地。需要提供 GitHub 仓库的 URL,可以在仓库页面的右上角找到 “Code” 按钮,然后选择 HTTPS 或 SSH URL。
  • 使用 HTTPS URL 克隆仓库:
    git clone https://github.com/用户名/仓库名.git
    
  • 使用 SSH URL 克隆仓库(需要配置 SSH 密钥):
    git clone git@github.com:用户名/仓库名.git
    

2. 构建项目,编写代码

克隆成功后,此时项目是一个空仓库,使用 go mod 的方式管理包,对项目进行初始化:

git mod init github.com/用户名/仓库名

初始化成功后,项目根目录下会新增一个 go.mod 文件。
⚠️ 注意:这里的项目名需要为 github.com/用户名/仓库名 (将用户名、仓库名替换为你实际项目中的名称)

Go 代码示例:

package clienttype Client struct {AccessKey stringSecretKey string
}func NewClient(accessKey, secretKey string) *Client {return &Client{AccessKey: accessKey,SecretKey: secretKey,}
}func (c *Client) GetNameByGet(name string) (data interface{}, err error) {return "名字是" + name, nil
}

项目目录结构展示:

在这里插入图片描述

3. 提交代码到 GitHub仓库

完成了代码编写及测试正常后,将代码提交到远程仓库中。

  1. 添加文件到暂存区: 使用 git add 命令将你要提交的文件添加到 Git 的暂存区。可以使用以下命令添加所有更改:

    git add .	//这个命令将当前目录下所有文件(包括新添加、修改和删除的文件)添加到暂存区。但它不会包括未跟踪的文件,也就是那些没有被 Git 管理的文件。如果你在项目中新建了文件,使用这个命令将不会将它们添加到暂存区。
    git add -Agit add --all	//这个命令会将当前目录下的所有更改(包括新添加、修改、删除的文件)以及未跟踪的文件全部添加到暂存区。它是一个更全面的命令,适用于确保所有更改都被提交到 Git。
    

    或者,如果你只想添加特定文件,可以使用:

    git add 文件名
    
  2. 提交更改: 使用 git commit 命令将暂存区的更改提交到本地仓库,并添加提交消息来描述你的更改。例如:

    git commit -m "添加了一个新功能"
    
  3. 推送到远程仓库: 使用 git push 命令。例如:

    git push -u origin 分支名
    

    将 “分支名” 替换为你要推送的分支名称。通常,main 或 master 是默认的主分支名称。

  4. 📢 注意,如果你是第一次提交到 GitHub 仓库,需要配置 Git 以关联本地仓库和远程仓库。使用 git remote 命令来添加远程仓库的别名。例如:

    git remote add origin 仓库URL
    

    “origin” 是远程仓库的别名,可以自定义。“仓库URL” 是你 GitHub 仓库的 URL。
    一旦关联了远程仓库,就使用 git push 将更改推送到远程仓库

4. 发布版本

push成功后,刷新GitHub上的仓库,确认项目代码已经上传成功。然后点击tags 创建标签和构建release版本。
在这里插入图片描述
接着点击:Create a new release
在这里插入图片描述
然后,添加一个版本号打上tag,完善描述信息后,点击 Publish release 发布。
![在这里插入图片描述](https://img-blog.csdnimg.cn/3404adc6ff7048acac4ecc897506066e.pn

5. 现在其他人可以引用使用你的模块包了

成功发布后,其他人就可以像平时使用第三方包一样直接go getimport 我们的模块包了。

go get github.com/用户名/仓库名

或者

require (github.com/用户名/仓库名 v1.0.0
)

然后运行 go get 命令下载该依赖。

使用该模块包:

package main
import "github.com/xiaoxiongmao5/xapi-clientsdk/client"func main() {accessKey, secretKet := "zs", "123456"clientsdk = client.NewClient(accessKey, secretKey)data, err := clientsdk.GetNameByGet(name)if err != nil {fmt.Println("ERROR: Failed to read response, err=", err)return}fmt.Printf("SUCCESS: data=%T data=%v \n", data, data)
}

相关文章:

Golang编写客户端SDK,并开源发布包到GitHub,供其他项目import使用

目录 编写客户端SDK,并开源发布包到GitHub1. 创建 GitHub 仓库2. 构建项目,编写代码Go 代码示例:项目目录结构展示: 3. 提交代码到 GitHub仓库4. 发布版本5. 现在其他人可以引用使用你的模块包了 编写客户端SDK,并开源…...

手写Mybatis:第10章-使用策略模式,调用参数处理器

文章目录 一、目标:参数处理器二、设计:参数处理器三、实现:参数处理器3.1 工程结构3.2 参数处理器关系图3.3 入参数校准3.4 参数策略处理器3.4.1 JDBC枚举类型修改3.4.2 类型处理器接口3.4.3 模板模式:类型处理器抽象基类3.4.4 类…...

pair 是 C++ 标准库中的一个模板类,用于存储两个对象的组合

pair 是 C 标准库中的一个模板类&#xff0c;用于存储两个对象的组合。它位于 <utility> 头文件中。 pair 类的定义如下&#xff1a; template <class T1, class T2> struct pair {T1 first;T2 second;pair();pair(const T1& x, const T2& y);template&l…...

More Effective C++学习笔记(5)

目录 条款25&#xff1a;将构造函数和非成员函数虚化条款26&#xff1a;限制某个类所能产生的对象数量条款27&#xff1a;要求&#xff08;或禁止&#xff09;对象产生于heap&#xff08;堆&#xff09;之中条款28&#xff1a;智能指针条款29&#xff1a;引用计数条款30&#x…...

SpringMVC之CRUD(直接让你迅速完成部署)

一、项目创建 首先创建一个基于maven的项目部署&#xff0c;如果有些插件没有的话可以参考mybatis入门Idea搭建 二、配置依赖导入 依赖导入 1、pom.xml 需要根据自己的文件来进行导入&#xff0c;并不是原本照着导入 <project xmlns"http://maven.apache.org/POM/4.0.0…...

Github Copilot连接不上服务器

现象 报错&#xff1a;[ERROR] [default] [2023-09-08T15:47:01.542Z] GitHub Copilot could not connect to server. Extension activation failed: “connect ETIMEDOUT 20.205.243.168:443” 原因 DNS解析api.github.com的地址到20.205.243.168&#xff0c;但实际上这个地…...

(数字图像处理MATLAB+Python)第十二章图像编码-第三、四节:有损编码和JPEG

文章目录 一&#xff1a;有损编码&#xff08;1&#xff09;预测编码A&#xff1a;概述B&#xff1a;DM编码C&#xff1a;最优预测器 &#xff08;2&#xff09;变换编码A&#xff1a;概述B&#xff1a;实现变换编码的主要问题 二&#xff1a;JPEG 一&#xff1a;有损编码 &am…...

基于SpringBoot + Vue的项目整合WebSocket的入门教程

1、WebSocket简介 WebSocket是一种网络通信协议&#xff0c;可以在单个TCP连接上进行全双工通信。它于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936进行补充规范。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性…...

AI智能机器人的语音识别是如何实现的 ?

什么是智能语音识别系统&#xff1f;语音识别实际就是将人类说话的内容和意思转化为计算机可读的输入&#xff0c;例如按键、二进制编码或者字符序列等。与说话人的识别不同&#xff0c;后者主要是识别和确认发出语音的人并非其中所包含的内容。语音识别的目的就是让机器人听懂…...

RabbitMQ: 死信队列

一、在客户端创建方式 1.创建死信交换机 2.创建类生产者队列 3.创建死信队列 其实就是一个普通的队列&#xff0c;绑定号私信交换机&#xff0c;不给ttl&#xff0c;给上匹配的路由&#xff0c;等待交换机发送消息。 二、springboot实现创建类生产者队列 1.在消费者里的…...

232 - Crossword Answers (UVA)

这道题因为我把puzzle打成了Puzzle&#xff0c;卡了我很久…………真的太无语了。 题目链接如下&#xff1a; Online Judge 我的代码如下&#xff1a; #include <cstdio> #include <cctype> #include <set> const int maxx 10;int r, c, kase, cnt, tem…...

MySQL表结构设计规范

一、表设计 1. 命名规范 表名由小写英文字母和下划线组成表必须填写描述信息表名中的英文单词应该使用单数形式临时表以 tmp 为前缀&#xff0c;以日期为后缀备份表以 bak 为前缀&#xff0c;以日期为后缀使用hash、md5 进行散表&#xff0c;表名后缀使用16进制 2. 设计规范…...

如何利用ProcessOn 做资产管理流程图

资产管理 是一家公司最重要的管理活动。好的资产管理可以让资源最优化利用&#xff0c;实现资产价值的最大化。可以帮助组织管理和降低风险。同时当需要决策的时候&#xff0c;对资产数据进行分析和评估&#xff0c;也可以帮助做出更明智的决策&#xff0c;如优化资产配置、更新…...

geopandas 笔记:geometry上的操作汇总

如无特殊说明&#xff0c;数据主要来自&#xff1a;GeoDataFrame 应用&#xff1a;公园分布映射至subzone_UQI-LIUWJ的博客-CSDN博客 0 读入数据 subzone gpd.read_file(ura-mp19-subzone-no-sea-pl.geojson) subzone subzone_tstsubzone[0:5] subzone_tst subzone_tst.plot…...

【MongoDB】Ubuntu22.04 下安装 MongoDB | 用户权限认证 | skynet.db.mongo 模块使用

文章目录 Ubuntu 22.04 安装 MongoDB后台启动 MongoDBshell 连入 MongoDB 服务 MongoDB 用户权限认证创建 root 用户开启认证重启 MongoDB 服务创建其他用户查看用户信息验证用户权限删除用户 skynet.db.mongo 模块使用authensureIndexfind、findOneinsert、safe_insertdelete、…...

Python对象序列化

迷途小书童的 Note 读完需要 7分钟 速读仅需 3 分钟 大家好&#xff0c;我是迷途小书童&#xff01; 在 Python 开发中&#xff0c;我们经常需要将对象数据保存到磁盘&#xff0c;或者通过网络传输对象信息。这时就需要序列化&#xff0c;Pickle 库为我们提供了极为方便的对象序…...

jmeter 准确的吞吐量定时器 Precise Throughput Timer

准确的吞吐量定时器使用实例 提取码&#xff1a;gpex&#xff1a; 说明&#xff1a;配置10个线程&#xff0c;每个线程请求200次&#xff0c;通过准确地的定时器模拟QPS为20的场景 配置测试接口参考链接 配置jmeter测试脚本&#xff0c;主要关注准确的吞吐量定时器参数配置 目…...

后端/DFT/ATPG/PCB/SignOff设计常用工具/操作/流程及一些文件类型

目录 1.PD/DFT常用工具及流程 1.1 FC和ICC2 1.2 LC (Library compiler) 1.3 PrimeTime 1.4 Redhawk与PA 1.5 Calibre和物理验证PV 1.6 芯片设计流程 2.后端、DFT、ATPG的一些常见文件 2.1 LEF和DEF 2.2 ATPG的CTL和STIL 2.3 BSDL 2.4 IPXCT 3.PCB设计的一些工作和工…...

jvm 程序计算器 程序计数器是否溢出 程序计数器是做什么的 java程序计数器会内存溢出吗 程序计数器作用与用处 jvm内存模型 jvm合集(一)

1. jvm内存模型&#xff1a; 内存模型&#xff1a; 程序计数器 堆 栈 本地方法栈 方法区 2. java代码编译为class文件&#xff0c;由类加载器加载到jvm&#xff0c;然后由解释器,jit即时编译到机器码&#xff0c;机器码再到cpu执行 3. 程序计数器&#xff1a; 是一块较小的内存…...

关于近期小程序测试的常见漏洞演示

本章节将为大家介绍一下小程序常见的漏洞的展示案例&#xff0c;包括支付业务逻辑漏洞、任意用户登录漏洞、水平越权漏洞等高危漏洞。 以上小程序测试均获取授权&#xff0c;并且客户均已得到修复(仅供学习&#xff0c;请勿恶意攻击)​ 关于微信小程序如何拦截数据包&#xff…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...