Home > Backend Development > Golang > How to Return Default Values for Generic Types in Go?

How to Return Default Values for Generic Types in Go?

Linda Hamilton
Release: 2024-12-19 02:24:09
Original
966 people have browsed it

How to Return Default Values for Generic Types in Go?

Returning Default Values for Generic Types in Go

In Go, how can you return a default value for a generic type T? Consider the following code:

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
}
Copy after login

When trying to compile this code, you may encounter the error:

cannot use nil as T value in return statement
Copy after login

The Issue of Returning Nil

Returning nil for a generic type is not allowed in Go. This is because nil is not a valid value for all types. For example, if T is an integer, returning nil would be meaningless. Similarly, nil is not a valid value for structs.

Returning the Zero Value

Instead of returning nil, you should return the zero value for the type argument used for T. The zero value is nil for pointers and slices, the empty string for strings, and 0 for integers and floating-point numbers.

To return the zero value, you can declare a variable of type T and return it:

func getZero[T any]() T {
    var result T
    return result
}
Copy after login

Testing the Zero Value Function

Here's an example of how to test the getZero function:

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)
}
Copy after login

Output:

int 0
string ""
image.Point {0, 0}
*float64 <nil>
Copy after login

This shows that the getZero function returns the expected zero values for different types.

The above is the detailed content of How to Return Default Values for Generic Types in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template