Files

31 lines
438 B
Go
Raw Permalink Normal View History

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
}