泛型

基本使用

如果不使用泛型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

func PrintUser(users interface{}) {
for _, v := range users.([]string) {
fmt.Println(v)
}
}

func main() {
users := []string{"cwz", "李四", "张三"}
PrintUser(users)
}

需要断言

使用泛型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

func PrintUser[T any](users []T) {
for _, v := range users {
fmt.Println(v)
}
}

func main() {
users := []string{"cwz", "李四", "张三"}
PrintUser(users)
}

实体类的初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import "fmt"

type UserModel[T any] struct {
Id T
Name string
}

func main() {
u := UserModel[int]{Id: 123, Name: "test"}
u2 := UserModel[string]{Id: "123", Name: "test"}
fmt.Println(u)
fmt.Println(u2)
}

在初始化的时候指定类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

type UserModel[T any] struct {
Id T
Name string
}

func NewUserModel[T any](id T) *UserModel[T] {
return &UserModel[T]{Id: id}
}

func main() {
u := NewUserModel[int](123)
u2 := NewUserModel[string]("123")
fmt.Println(u)
fmt.Println(u2)
}

泛型+工厂模式