golang 接口方法使用泛型

作者: adm 分类: go 发布时间: 2024-07-17

在 Go 语言中,从 Go 1.18 开始支持泛型,这使得接口可以定义使用泛型的方法。泛型允许你编写灵活且可重用的组件,这些组件能够处理多种类型而无需为每种类型重复代码。

下面是一个简单的例子来展示如何定义一个使用泛型的接口方法:

Go

package main

import (
	"fmt"
	"reflect"
)

// 定义一个空接口 Numeric,它可以接受 int 和 float64
type Numeric interface{}

// 定义一个使用泛型的接口
type GenericInterface[T Numeric] interface {
	SetValue(T)
	GetValue() T
}

// 实现泛型接口的结构体
type MyStruct[T Numeric] struct {
	Value T
}

// 定义一个泛型构造函数
func NewMyStruct[T Numeric](value T) MyStruct[T] {
	return MyStruct[T]{Value: value}
}


// 泛型方法实现
func (m *MyStruct[T]) SetValue(value T) {
	m.Value = value
}

func (m *MyStruct[T]) GetValue() T {
	return m.Value
}

func main() {
	// 创建不同类型的实例
	intInstance := NewMyStruct[int](10)
	floatInstance := NewMyStruct[float64](10.5)

	// 使用整数实例
	fmt.Printf("Integer Value: %v, Type: %s\n", intInstance.Value, reflect.TypeOf(intInstance.Value))
	intInstance.SetValue(109)
	// 使用整数实例
	fmt.Printf("Integer Value: %v, Type: %s\n", intInstance.GetValue(), reflect.TypeOf(intInstance.GetValue()))
	// 使用浮点数实例
	fmt.Printf("Float Value: %v, Type: %s\n", floatInstance.Value, reflect.TypeOf(floatInstance.Value))
}

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!