iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >从接口转换私有动态类型{}
  • 107
分享到

从接口转换私有动态类型{}

2024-02-06 09:02:56 107人浏览 安东尼
摘要

问题内容 我正在尝试使用 Go-sqlmock 包测试 sql 查询,其中参数之一是 gosnowflake.array (本质上是切片的包装器)。通常,类似这样的事情需要我创建一个值

问题内容

我正在尝试使用 Go-sqlmock测试 sql 查询,其中参数之一是 gosnowflake.array (本质上是切片的包装器)。通常,类似这样的事情需要我创建一个值转换器,我已将其包含在内:

func (opt arrayConverterOption[T]) ConvertValue(v any) (driver.Value, error) {
    casted, ok := v.(*[]T)
    if ok {
        Expect(*casted).Should(HaveLen(len(opt.Expected)))
        for i, c := range *casted {
            Expect(c).Should(Equal(opt.Expected[i]))
        }
    } else {
        fmt.Printf("Type: %T\n", v)
        return v, nil
    }

    return "TEST_RESULT", nil
}

现在,为提交给查询的每个参数调用此函数。我用它来测试切片中值的正确性,或者如果不是,则传递参数。我遇到的问题是,当我创建 arrayconverteroption[string] 并给它一个 gosnowflake.array(["a", "b", "c"]) 作为参数时,类型断言失败,因为gosnowflake.array 返回一个内部动态类型 *stringarray,它被定义为 *[]string

所以你可以在这里看到我的困境。一方面,我无法转换 v 因为它是 interface{} 并且我无法为 v 起别名,因为内部类型不是 *[]string,而是 *stringarray。那么,我应该在这里做什么?


正确答案


我没有找到一种方法可以在不引起反思的情况下做到这一点。然而,经过反思,我确实做到了:

var casted []T
var ok bool

value := reflect.ValueOf(v)
if value.Kind() == reflect.Pointer {
    if inner := value.Elem(); inner.Kind() == reflect.Slice {
        r := inner.Convert(reflect.TypeOf([]T{})).Interface()
        casted, ok = r.([]T)
    }
}

因此,这段代码专门检查任何指向切片的指针,这就是我的动态类型。然后它使用反射将内部对象转换为我期望的切片类型。之后,我对结果调用 interface() 以从反射值中获取 interface{},然后将其转换为 []t。这样就成功了。如果没有,那么我就不会使用这些动态类型切片之一,并且我可以正常处理该类型。

以上就是从接口转换私有动态类型{}的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 从接口转换私有动态类型{}

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 从接口转换私有动态类型{}
    问题内容 我正在尝试使用 go-sqlmock 包测试 sql 查询,其中参数之一是 gosnowflake.array (本质上是切片的包装器)。通常,类似这样的事情需要我创建一个值...
    99+
    2024-02-06
  • Mybatis的类型转换接口TypeHandler
    目录类型处理器接口TypeHandler类型处理器BaseTypeHandlerjdbc类型转为java类型java类型转为jdbc类型总结前言: mybatis可以实现jdbc类型...
    99+
    2022-11-13
    Mybatis类型转换接口 Mybatis TypeHandler
  • 类型定义和接口转换
    从现在开始,我们要努力学习啦!今天我给大家带来《类型定义和接口转换》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起...
    99+
    2024-04-05
  • 将接口转换为目标类型
    学习Golang要努力,但是不要急!今天的这篇文章《将接口转换为目标类型》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!问题内容我有...
    99+
    2024-04-04
  • go语言接口类型如何转换
    这篇文章主要介绍“go语言接口类型如何转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言接口类型如何转换”文章能帮助大家解决问题。go语言可利用类型断言来进行接口类型。在Go中,无论是将一个...
    99+
    2023-07-05
  • Golang中如何处理动态接口类型?
    大家好,我们又见面了啊~本文《Golang中如何处理动态接口类型?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进...
    99+
    2024-04-05
  • 固态硬盘有几种类型的接口
    固态硬盘(SSD)有以下几种类型的接口:1. SATA接口:最常见的接口类型,可以通过SATA3.0接口达到6Gbps的传输速度。适...
    99+
    2023-09-05
    固态硬盘
  • Java 之类型转换与多态详情
    目录一、类型检查二、基本类型转换三、upcast与多态四、downcast五、Object类型一、类型检查 Java的任意变量和引用经过类型声明(type declaration),...
    99+
    2024-04-02
  • 动手学习 Python 变量:从命名规则到类型转换
    Python 中变量的命名规则与其他编程语言类似,但有一些独特的约定。变量名可以由字母、数字和下划线组成,但不能以数字开头。变量名区分大小写,因此 a 和 A 是两个不同的变量。建议使用小写字母和下划线来命名变量,如 my_variabl...
    99+
    2024-02-06
    变量,命名规则,类型转换,Python
  • 互联网中交换机接口类型有哪些
    小编给大家分享一下互联网中交换机接口类型有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!交换机具有丰富的接口类型,如:10GE、GE、FE、OC-48/STM...
    99+
    2023-06-20
  • JavaScript自动转换类型是什么
    本篇内容介绍了“JavaScript自动转换类型是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! &...
    99+
    2024-04-02
  • cpu接口类型有哪些
    这篇文章主要介绍了cpu接口类型有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇cpu接口类型有哪些文章都会有所收获,下面我们一起来看看吧。 有...
    99+
    2023-02-07
    cpu
  • PHP 函数的类型提示和自动类型转换
    php 类型提示可声明函数的期望参数和返回类型,以避免类型错误。它还提供自动类型转换,在转换失败时抛出类型错误。这些特性增强了代码可读性,减少了错误,并提高了编译器错误检测能力,如在验证...
    99+
    2024-04-27
    php 类型提示 git 代码可读性
  • Spring Boot中如何使用Convert接口实现类型转换器
    目录使用Convert接口实现类型转换器Converter接口添加依赖实体类1.User类2.Article类配置类型转化器1.定义全局日期转换器2.定义全局对象转换器3.定义全局L...
    99+
    2024-04-02
  • Golang类型转换详解:从入门到精通
    Golang中的类型转换是一种常用的操作,特别是在处理不同数据类型之间的转换时。本文将从基础概念到高级应用,为读者详细解析Golang中类型转换的相关知识,并提供具体的代码示例。 一、...
    99+
    2024-02-26
    golang 类型转换 基础到高级 隐式类型转换
  • PHP接口中如何处理重定向的数据类型转换?
    PHP是一种广泛使用的编程语言,它可以用来开发Web应用程序。在Web应用程序中,接口是非常常见的一种开发方式。接口可以让Web应用程序与其他系统进行交互,以便实现数据的共享和传输。在接口开发中,重定向是一个非常常见的问题,因为它涉及到数据...
    99+
    2023-10-21
    接口 重定向 数据类型
  • php类型转换函数有哪些
    在Web开发中,我们经常需要对不同的数据类型进行转换处理。比如将字符串转化为整数、浮点数,把日期转化为时间戳等。这些转化操作在PHP中都可以通过内置函数实现。本文将介绍PHP中常用的转化函数。一、整型转换函数intval(): 把一个变量转...
    99+
    2023-05-14
    php
  • python类型转换函数有哪些
    python中的类型转换函数:1.int()函数,将一个字符串或数字转换为整型;2.float()函数,将整数和字符串转换成浮点数;3.str()函数,将对象转化为字符串;python中常用的类型转换函数有以下几种int()函数int()函...
    99+
    2024-04-02
  • C#数据类型转换有哪些
    本篇内容介绍了“C#数据类型转换有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C# 的类型转换有显式转型 和 隐式转型 两种方式。显式...
    99+
    2023-06-26
  • 这个接口和私有数据类型模式的概念是什么
    亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《这个接口和私有数据类型模式的概念是什么》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。问题...
    99+
    2024-04-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作