31 lines
438 B
Go
31 lines
438 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
)
|
|
|
|
type CloneableMixin[T any] struct{}
|
|
|
|
func (m CloneableMixin[T]) Clone() *T {
|
|
return new(T)
|
|
}
|
|
|
|
type Data1 struct {
|
|
CloneableMixin[Data1]
|
|
}
|
|
|
|
type Data2 struct {
|
|
CloneableMixin[Data2]
|
|
}
|
|
|
|
func main() {
|
|
data1 := Data1{}
|
|
clone1 := data1.Clone()
|
|
fmt.Println(reflect.TypeOf(clone1)) // *main.Data1
|
|
|
|
data2 := Data2{}
|
|
clone2 := data2.Clone()
|
|
fmt.Println(reflect.TypeOf(clone2)) // *main.Data2
|
|
}
|