返回顶部
首页 > 资讯 > 精选 >如何支持同一接口的多个版本?
  • 114
分享到

如何支持同一接口的多个版本?

2024-02-06 08:02:47 114人浏览 八月长安
摘要

问题内容 我正在编写一个 Go 模块,它实现一个满足接口的结构。我们只想维护库的单个版本,但我们的客户使用我们的依赖项之一的多个版本。 依赖项提供了我们想要实现的接口,如下所示。 ty

问题内容

我正在编写一个 Go 模块,它实现一个满足接口的结构。我们只想维护库的单个版本,但我们的客户使用我们的依赖项之一的多个版本。

依赖项提供了我们想要实现的接口,如下所示。

type supercoolinterface interface {
    dooldcoolthing(value string)
}

我们的实现是这样的。

type supercoolimpl struct {}

func (sc *supercoolimpl) dooldcoolthing(value string) {}

新版本的依赖项在类型模块中添加了新类型。

type newtype struct {
  value string
}

依赖项向接口添加了一个方法。

type supercoolinterface interface {
    dooldcoolthing(value string)
    donewcoolthing(value types.newtype)
}

现在,如果我实现新方法,它将无法使用旧版本的库进行编译,因为 types.newtype 不存在。但是,如果我不实现新版本,我就无法满足新版本的接口。

type SuperCoolImpl struct {}

func (sc *SuperCoolImpl) DoOldCoolThing(value string) {}
func (sc *SuperCoolImpl) DoNewCoolThing(value types.NewType) {}

我们是否需要分叉代码才能支持此版本?在带有预处理器的语言中,有一个简单的解决方案,所以我假设 go 一定有一个我缺少的解决方案。

我们计划继续开发并支持这两个版本,因此需要确保两个不同版本保持一致性会很烦人。我希望我可以用反射或类似于 c 预处理器的东西来做一些事情,在其中我可以定义一个预处理器值,并且仅当我们指示库的版本具有正确的类型时才实现该方法。


正确答案


我找到了适合我的情况的解决方案。

感谢@Burak Serdar 为我指明了正确的方向。

我的解决方案是将旧的实现放入 impl/v0 包中,将新的实现放入 impl/v1 包中。

使用旧版本依赖项的客户端将使用 impl/v0,使用新版本依赖项的客户端将使用 impl/v1。

由于golang只编译直接导入的代码,所以只有接口版本正确的包才会被编译,所以双向都会编译成功。

这减轻了我对必须分叉整个库的担忧。

编辑:如果有人使用此解决方案,如果您当前正在使用 go test ./... 运行测试,则会出现一个问题。该命令似乎尝试构建每个模块,无论它是否包含测试。

但是您可以使用 go test $(go list ./... | grep -v ) 排除测试,然后您可以在另一个命令中针对正确的版本运行这些测试。

以上就是如何支持同一接口的多个版本?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 如何支持同一接口的多个版本?

本文链接: https://lsjlt.com/news/561335.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何支持同一接口的多个版本?
    问题内容 我正在编写一个 go 模块,它实现一个满足接口的结构。我们只想维护库的单个版本,但我们的客户使用我们的依赖项之一的多个版本。 依赖项提供了我们想要实现的接口,如下所示。 ty...
    99+
    2024-02-06
  • Java9版本新特性同一个Jar支持多JDK版本运行
    目录一、基本使用方法二、真实的例子java 8代码Java 9代码编译运行 Main class 我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Ja...
    99+
    2024-04-02
  • 详解node如何让一个端口同时支持https与http
    众所周知node是一个高性能的web服务器,使用它可以很简单的创建一个http或https的服务器。 比如一个很简单的http服务器: var http = require('http'); var ...
    99+
    2022-06-04
    端口 详解 http
  • JAVA JDK不同版本对JFrame的支持
        最近,一新手学习JAVA,其摸索到了JFrame,在使用中遇到了一个问题,就是JDK1.8对JFrame的set方法不完全支持。环境信息:操作系统:DELL 7470/windows 7 X86_64开发平台:M...
    99+
    2023-06-02
  • apache如何更改支持php版本
    这篇文章主要介绍了apache如何更改支持php版本的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇apache如何更改支持php版本文章都会有所收获,下面我们一起来看看吧。首先,我们需要了解Apache服务器与...
    99+
    2023-07-05
  • 宝塔如何支持多个ssl
    宝塔支持多个ssl的方法:打开宝塔面板,在左边栏找到网站。在列表中选择需要部署ssl的域名,点击右侧“设置”。在弹出来的界面找到“ssl”。面板提供了三个证书,点击第二个证书,勾选要添加ssl证书的域名,点击“申请”。申请通过后,开启“强制...
    99+
    2024-04-02
  • Windows系统如何支持NumPy接口?
    NumPy是一个Python科学计算库,它提供了一种强大的多维数组对象,以及一系列操作这些数组的函数。在数据科学领域,NumPy是一个非常重要的工具,可以用于数据分析、机器学习、深度学习等领域。在本文中,我们将介绍如何在Windows系统...
    99+
    2023-05-26
    windows 接口 numpy
  • 如何解决一个微信号同时支持多个环境网页授权问题
    这篇文章将为大家详细讲解有关如何解决一个微信号同时支持多个环境网页授权问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。项目进行微信开发, 认证了一个微信服务号专门用于内...
    99+
    2024-04-02
  • 如何对支持多个版本的服务器的特定服务进行 thrift 调用
    大家好,我们又见面了啊~本文《如何对支持多个版本的服务器的特定服务进行 thrift 调用》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相...
    99+
    2024-04-05
  • 如何创建 PHP 函数库并使其支持不同的 PHP 版本?
    php 函数库可以通过封装常见任务提高代码重用性。要创建支持不同 php 版本的可重用函数库:定义函数库和兼容的 php 版本范围;根据 php 版本处理版本差异;打包函数库供其他项目使...
    99+
    2024-04-26
    php 函数库 composer
  • maven如何保持版本一致
    要保持 Maven 项目中的版本一致,可以采取以下措施:1. 统一项目的版本号:在 Maven 项目的根目录下的pom.xml文件中...
    99+
    2023-09-04
    maven
  • Microsoft宣布将停止支持多个.NET Framework 版本的示例分析
    Microsoft宣布将停止支持多个.NET Framework 版本的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。...
    99+
    2024-04-02
  • 最新Win10 10130预览版支持同时运行Modern App多个实例
    在最新的Windows 10 Build 10130预览版中,有个新功能值得关注,预示着更佳的用户体验。那就是Modern App能够同时以多个实例运行的能力。目前在该版本中,计算器应用是唯一一个支持该特性的应用,但据熟...
    99+
    2023-06-15
    windows 10 10130 Modern App 实例 预览 Win10
  • Spring接口支持返回多种格式的方法
    本篇内容介绍了“Spring接口支持返回多种格式的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1...
    99+
    2024-04-02
  • 自定义的ControllerFactory接口如何实现支持Area
    这篇文章将为大家详细讲解有关自定义的ControllerFactory接口如何实现支持Area,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。几个星期之前,有个朋友对我说,他的项目中需要将前后...
    99+
    2023-06-17
  • vue项目中如何调用多个不同的ip接口
    目录如何调用多个不同的ip接口第一个文件第二个文件第三个文件设置自动配置不同环境接口1.再根目录新建一个文件夹configenv2.在main.js 入口文件中3.在实际Vue页面中...
    99+
    2022-11-13
    vue调用接口 vue调用ip接口 vue调用多个接口
  • 如何知道Shell最多支持多少个参数
    本篇内容介绍了“如何知道Shell最多支持多少个参数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在脚本编写过程中,通常会涉及到参数的输入。...
    99+
    2023-06-09
  • 多个python版本如何指定python的某一个版本使用pip工具安装
    背景 同时安装了python2.7和python3.7两个版本,那么如果我想将第三方的包安装到指定的python版本写该怎么做呢?(注意了:这里我只查询出来2.7版本,是因为我只配置了版本2.7的环境变量)   解决方法 方法一:使用全...
    99+
    2023-10-20
    python pip 开发语言
  • 利用java如何实现一个微信APP支付接口
    这篇文章给大家介绍利用java如何实现一个微信APP支付接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。开始开发1、配置相关的配置信息1、配置appid(Android)、mch_id(ios)、微信支付后的回调地址...
    99+
    2023-05-31
    java 支付
  • SAP不支持交货单中同一个物料多个行项目怎么解决
    这篇文章主要介绍“SAP不支持交货单中同一个物料多个行项目怎么解决”,在日常操作中,相信很多人在SAP不支持交货单中同一个物料多个行项目怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SAP不支持交货单...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作