golang 1.18泛型记录

本文介绍了Go语言中的泛型概念,通过示例展示了如何创建泛型切片、泛型映射和泛型通道,并提供了相关函数的使用方法,如printSlice和testMap。此外,还涵盖了类型约束和接口的应用,如same函数和testChan。
摘要由CSDN通过智能技术生成
package main

import (
	"fmt"
	"log"
)

type vector[T any] []T                 //泛 型切片
type M[k string | int, v any] map[k]v  // 泛型map
type Maps[k comparable, v any] map[k]v // 泛型map
type C[T any] chan T                   // 泛型通道

type Person[T any] struct {
	Name string
	Sex  T
}

// 定义一个any类型的参数
// T 就是any类型
func printSlice[T any](s []T) {
	for _, V := range s {
		fmt.Printf("%v \n", V)
	}
}

func main() {
	printSlice[int]([]int{66, 77, 88, 99, 100})
	printSlice[string]([]string{"zhangsan", "lisi", "wangwu", "zhaosi"})
	// 同时我们在使用的时候也可以省略显式类型
	printSlice[int8]([]int8{1, 2, 3, 4})
	printSlice([]int{66, 77, 88, 99, 100})

	// 泛型切片
	v := vector[int]{23, 34, 45}
	printSlice(v)

	// 泛型map
	testMap()

	// 泛型通道
	testChan()
}

func testMap() {
	m1 := M[string, string]{"key": "val"}
	log.Println(m1)
	m2 := M[string, int]{"key": 1}
	log.Println(m2)
}

func testChan() {
	c1 := make(C[int], 10)
	c1 <- 1
	log.Println(<-c1)

}

func same[T int | float64 | string](a, b T) bool {
	return a == b
}

func funcss() {
	b := same[string]("1", "2")
	fmt.Println(b)
	same(1, 2) // 隐士
}

func TestPeson() {
	p := Person[int]{}
	p.Name = "123"
	p.Sex = 1

	m := make(M[int, string])
	m[123] = "123"

	testMy[MyInt](23)
}

type MyType interface {
	~int | float64 | string
}

// 波浪线可以 myint
type MyInt int

func testMy[t MyType](s t) {
	log.Println(s)
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gitxuzan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值