登录
首页 >  Golang >  Go问答

实现泛型:返回基础类型切片 T

来源:stackoverflow

时间:2024-02-05 21:24:47 231浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《实现泛型:返回基础类型切片 T》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我正在开发一个遗传算法库,我对每个基因的碱基使用通用类型声明,即 type gene[t相当] struct { bases: []t }。原因是并不是每个问题都可以使用特定的数据类型来解决,例如float64uint8,因此它的设计对于最终用户用例来说是灵活的。我遇到了测序方案的问题,其中基因由 separator []t 分隔:在最终基因为空的情况下,测序会产生不应该存在的异常分隔符,这可能会导致脱序将其解析为单独的等位基因或仅包含分隔符的基因。有两种方法可以处理它:第一种方法是忽略空遗传结构并在测序过程中排除它们,但这可能会删除有用的结构信息,例如在模拟/优化期间保存中间基因组(包括遗传漂变)的情况下;第二种方法是引入占位符序列来识别空结构。后者是我想做的。

我希望通过翻转 separator []t 中每个碱基的位来自动从分隔符生成此占位符序列,并且我可以使用“reflect”包来检测正在使用哪种类型。但是,当函数返回签名为 []t 时,我无法返回 []int。我可以做类似以下的事情,但我不确定这是否是一个好的做法。

func inverseSeparator[T comparable](separator []T) []T {
    result := []T
    switch reflect.TypeOf(separator[0]).Kind() {
    case reflect.Int:
        var v interface{}
        for i := 0; i < len(separator); i++ {
            // do the bit flip
            v = resultOfBitFlip 
            result = append(result, v.(T))
        }
    // other cases
    }
    return result
}

将位翻转的结果转换回 t 切片的最佳方法是什么,或者这是一个不好的方法?


正确答案


  • 我认为对所附代码的一个很好的优化如下,它提供了基本的错误处理机制:
func inverseSeparator[T comparable](separator []T) ([]T, error) {
    switch separator[0].(type) {
    case int:
        var result []T
        for _, val := range separator {
            // Perform bit flip
            // Make sure T is a valid numeric type (int, uint, etc.) before flipping bits
            if n, ok := val.(int); ok {
                // Perform bit flipping for integers
                flipped := ^n
                result = append(result, T(flipped).(T))
            } else {
                // Return an error if the type is not supported for bit flipping
                return nil, fmt.Errorf("unsupported type for bit flipping: %T", val)
            }
        }
        return result, nil
    // Handle other cases for different types, if needed.
    default:
        return nil, fmt.Errorf("unsupported type for inverseSeparator: %T", separator[0])
    }
}

终于介绍完啦!小伙伴们,这篇关于《实现泛型:返回基础类型切片 T》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>