// interface
type impl[T any] interface {
	Print(t T) error
}
var arr []impl[any]
func add[T any](s impl[T]) {
	arr = append(arr, s)
}
|      1HankLu      2023-07-08 00:38:16 +08:00 vscode 有这些提示吗?怎么弄出来? | 
|  |      2nopdan      2023-07-08 01:05:54 +08:00 谁教你这么用的。。。 | 
|  |      3popbones      2023-07-08 01:25:08 +08:00 via iPhone 在手机上凭直觉这个应该写成 `func add[T any, M impl[T]](s M)` 或者 `func add[T impl[any]](s T)` 第二种我没确认 这里有写简单的范型代码示例: https://github.com/popbones/goo | 
|  |      4Trim21      2023-07-08 04:16:15 +08:00 via Android go 的 any 只是空 interface 的别名,并不是真正的双向禁用类型检查的“真 any”。 这里不如说 impl[any] 和 impl[int] 就是两个不兼容的 interface 。 | 
|      7lllllliiii      2023-07-08 09:02:29 +08:00 `var arr []impl[any]`  这个里面的 any 就指定了类型只能是 any , 而 any 在 golang 里面是 `interface{}` 的别名 | 
|      8jorneyr      2023-07-08 09:37:41 +08:00 以前也遇到过这个问题,没解决,Go 的泛型还没有像 Java 的 ?这种。 | 
|  |      9lrh3321      2023-07-08 09:55:55 +08:00 arr 已经是 []impl[any] 类型了,它是 impl[any] 的切片 , 所以 add 函数就不应该是个泛型函数 | 
|  |      10lrh3321      2023-07-08 09:59:31 +08:00 // interface type impl[T any] interface { Print(t T) error } type implSlice[T any] []impl[T] func (arr *implSlice[T]) add(s impl[T]) { *arr = append(*arr, s) } var arr implSlice[any] 这样貌似是可以的 | 
|  |      11lasuar      2023-07-08 10:10:29 +08:00 #7 #9 说的没错,你只需把 (s impl[T]) 改为  (s impl[any]) 即可 |