package main

import (
	"fmt"
)

// 定义一个类型约束,包含所有内置的数值类型和字符串类型
type NumericOrString interface {
	int | int8 | int16 | int32 | int64 |
		uint | uint8 | uint16 | uint32 | uint64 | uintptr |
		float32 | float64 | complex64 | complex128 | string
}

// 使用泛型的add函数,要求类型T满足NumericOrString约束
func add[T NumericOrString](a, b T) T {
	return a + b
}

func main() {
	result := add(5, 3)
	fmt.Println(result) // 输出: 8

	result1 := add(float64(5.5), float64(3.2))
	fmt.Println(result1) // 输出: 8.7

	// 注意:字符串相加会按拼接处理
	result2 := add("Hello ", "World")
	fmt.Println(result2) // 输出: Hello World
}