1. Constrained Generic Type
package main
import (
"fmt"
)
type Stringer = interface {
String() string
}
type Integer int
func (i Integer) String() string {
return fmt.Sprintf("%d", i)
}
type String string
func (s String) String() string {
return string(s)
}
type Student struct {
Name string
ID int
Age float64
}
func (s Student) String() string {
return fmt.Sprintf("%s %d %0.2f", s.Name, s.ID, s.Age)
}
func addStudent[T Stringer](students []T, student T) []T {
return append(students, student)
}
func main() {
students := []String{}
result := addStudent[String](students, "Michael")
result = addStudent[String](result, "Jennifer")
result = addStudent[String](result, "Elaine")
fmt.Println(result)
students1 := []Integer{}
result1 := addStudent[Integer](students1, 45)
result1 = addStudent[Integer](result1, 64)
result1 = addStudent[Integer](result1, 78)
fmt.Println(result1)
students2 := []Student{}
result2 := addStudent[Student](students2, Student{"John", 213, 17.5})
result2 = addStudent[Student](result2, Student{"James", 111, 18.75})
result2 = addStudent[Student](result2, Student{"Marsha", 110, 16.25})
fmt.Println(result2)
}
2. Constrained Generic Type
package main
import (
"fmt"
)
type Student struct {
Name string
ID int
Age float64
}
func addStudent[T any](students []T, student T) []T {
return append(students, student)
}
func main() {
students := []string{}
result := addStudent[string](students, "Michael")
result = addStudent[string](result, "Jennifer")
result = addStudent[string](result, "Elaine")
fmt.Println(result)
students1 := []int{}
result1 := addStudent[int](students1, 45)
result1 = addStudent[int](result1, 64)
result1 = addStudent[int](result1, 78)
fmt.Println(result1)
students2 := []Student{}
result2 := addStudent[Student](students2, Student{"John", 213, 17.5})
result2 = addStudent[Student](result2, Student{"James", 111, 18.75})
result2 = addStudent[Student](result2, Student{"Marsha", 110, 16.25})
fmt.Println(result2)
}
标签:string,addStudent,result2,接口,result1,golang,result,Student
From: https://www.cnblogs.com/liujitao79/p/16996352.html