首页 > 后端开发 > Golang > 如何在 Go 中返回泛型类型的默认值?

如何在 Go 中返回泛型类型的默认值?

Linda Hamilton
发布: 2024-12-19 02:24:09
原创
968 人浏览过

How to Return Default Values for Generic Types in Go?

在 Go 中返回泛型类型的默认值

在 Go 中,如何返回泛型类型 T 的默认值?考虑以下代码:

type mylist[T any] struct {
    first *node[T]
}

type node[T any] struct {
    data T
    next *node[T]
}

func (list *mylist[T]) pop() T {
    if list.first != nil {
        data := list.first.data
        list.first = list.first.next
        return data
    }
    return nil
}

func (list *mylist[T]) getfirst() T {
    if list.first != nil {
        return list.first.data
    }
    return nil
}
登录后复制

尝试编译此代码时,您可能会遇到错误:

cannot use nil as T value in return statement
登录后复制

返回 Nil 的问题

Go 中不允许为泛型类型返回 nil。这是因为 nil 并不是所有类型的有效值。例如,如果 T 是整数,则返回 nil 将毫无意义。同样,nil 也不是结构体的有效值。

返回零值

您应该返回用于的类型参数的零值,而不是返回 nil T. 指针和切片的零值为 nil,字符串的零值为空字符串,整数和浮点数的零值为 0

要返回零值,您可以声明 T 类型的变量并返回它:

func getZero[T any]() T {
    var result T
    return result
}
登录后复制

测试零值函数

这是一个如何测试 getZero 的示例函数:

package main

import "fmt"

func main() {
    i := getZero[int]()
    fmt.Printf("%T %v\n", i, i)

    s := getZero[string]()
    fmt.Printf("%T %q\n", s, s)

    p := getZero[image.Point]()
    fmt.Printf("%T %v\n", p, p)

    f := getZero[*float64]()
    fmt.Printf("%T %v\n", f, f)
}
登录后复制

输出:

int 0
string ""
image.Point {0, 0}
*float64 <nil>
登录后复制

这表明 getZero 函数返回不同类型的预期零值。

以上是如何在 Go 中返回泛型类型的默认值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板