Go不能简单的将slice转换为接口的slice(2)

本文介绍了一个Go语言中实现的泛型函数,用于从一个包含多种类型的切片中找出最大值。该函数通过使用接口来处理不同类型的数值,并通过类型断言进行比较。

请先参看此文Go不能简单的将slice转换为接口的slice

package main

import (
    "fmt"
)

type AnyKind interface{}

func main() {
    fmt.Println(findMyMax([]AnyKind{3, 7, 1, 3, 56, 8}))
    fmt.Println(findMyMax([]AnyKind{1.2, 3.1, 16.7, 12.1}))
}

func findMyMax(ak []AnyKind) AnyKind {
    var akTemp AnyKind
    for _, v := range ak {
        switch v.(type) {
        case int:
            if akTemp == nil || v.(int) > akTemp.(int) {
                akTemp = v
            }
        case float64:
            if akTemp == nil || v.(float64) > akTemp.(float64) {
                akTemp = v
            }
        default:
            fmt.Println("type miss")
        }
    }
    return akTemp
}

使用这种方式实际上就是slice的传参,通过定义定义接口切片避免在参数传递是发生类型转换!

感觉go也是个很纠结的东西~~

转载于:https://my.oschina.net/xlplbo/blog/199630

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值