Home > Backend Development > Golang > How can I define a generic function using a custom structure without listing all structures?

How can I define a generic function using a custom structure without listing all structures?

PHPz
Release: 2024-02-09 20:30:10
forward
812 people have browsed it

How can I define a generic function using a custom structure without listing all structures?

In PHP, if we want to use a custom structure to define a common function without having to list all the structures, there is an efficient way to do it. This approach is achieved by using a variable number of parameters. We can accept any number of parameters by using ellipses (...) as parameter names in the function definition. Within the function body, we can use the func_get_args() function to get all the arguments passed to the function. This way, we can use these parameters inside the function without defining all the structures in advance. This flexible approach can help us write more general and reusable functions and improve coding efficiency.

Question content

Suppose I have two different structures:

type one struct {
  id string
  // other fields
}

type two struct {
  id string
  // other fields
}
Copy after login

Is it possible to define a function that accepts both one and two without explicitly listing them as options?

For example I'm looking for something like this:

type ModelWithId struct {
  Id string
}

func Test[M ModelWithId](m M) {
  fmt.PrintLn(m.Id)
}

one := One { Id: "1" }
Test(one) // Prints 1
Copy after login

I don't want to use functest[m one | two](m m) because I might have 10+ structures and I don't want to have to go back to that function every time I add a new structure to the code base .

Solution

Generics use methods to constrain type parameter behavior, so you need to rewrite the code as:

type one struct {
    id string
}

func (o *one) id() string {
    return o.id
}
Copy after login

Then your usage site will become:

type ModelWithId interface {
    Id() string
}

func Test[M ModelWithId](m M) {
    fmt.Println(m.Id())
}
Copy after login

The above is the detailed content of How can I define a generic function using a custom structure without listing all structures?. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template