Golang 泛型他来了!

2020-06-17 10:00:30 +08:00
 cabbage
https://blog.golang.org/generics-next-step

官方发布了几份草案,其中 go2 的泛型可以前往 https://go2goplay.golang.org 体验
14531 次点击
所在节点    Go 编程语言
85 条回复
ThanksSirAlex
2020-06-17 22:24:55 +08:00
最早都要明年 8 月
liulaomo
2020-06-17 22:42:53 +08:00
@ica10888 编译兼容?但是语法完全不兼容。自定义泛型和内置泛型的语法完全是两套。
tianshilei1992
2020-06-17 22:46:58 +08:00
@whoami9894 习惯了 C++ 的写法觉得其他的都丑,然而所有年轻的语言都觉得 C++ 的写法反人类…😂虽然我一直是 C++ 吹,但是我知道大部分的人都认为 C++ 的语法很反人类,比如说 lambda…
ConradG
2020-06-17 22:50:41 +08:00
别造成 py2 和 py3 级别的分裂就谢天谢地了
prenwang
2020-06-17 23:15:58 +08:00
interface 坑的一逼, 装箱拆箱跟玩魔术一样, 泛型快到碗里来
CoderGeek
2020-06-18 01:30:05 +08:00
好的 等出来我再转 go hhh
Balthild
2020-06-18 01:57:47 +08:00
@tianshilei1992 别偷换概念,这里「习惯了 C++ 的写法」特指 C++ 采用的这种尖括号泛型语法,你把 C++ 换成 Java 、Rust 、TypeScript 也一样成立。而年轻语言觉得「 C++ 的写法反人类」指的是 C++ 的其他特性,显然这些被批判的部分并不一定包括泛型语法。
Trim21
2020-06-18 02:55:22 +08:00
这个 go2go 工具转换出来的代码是什么样子的…
islxyqwe
2020-06-18 08:30:03 +08:00
func Map(type T, M)(f func(T) M, s []T) []M {
result := make([]M, len(s))
for k, v := range s {
result[k] = f(v)
}
return result
}

func main() {
Print(Map(func(a int64) string { return strconv.FormatInt(a, 16) }, []int64{42, 100, 200}))
}


还可以,处理数据总算能写的简洁点了
jmyz0455
2020-06-18 08:54:36 +08:00
go2 快来了,怕是又有一波降级
liberty1900
2020-06-18 09:05:56 +08:00
恭喜,程序可读性将会一去不复返
asche910
2020-06-18 09:22:10 +08:00
interface 又不是不能用(狗头)
FrankHB
2020-06-18 09:24:45 +08:00
@rockyou12 <>是病,得治。
这种 angle bracket 的习惯来自数学符号,正宗写法是 chevron ( ⟨ ⟩ ),只是在只有基本字符集支持的语言中才复用了大于小于号(<>)。结果词法歧义上就炸了……(看看 C++ >>。)
没看到歧义还觉得不丑,说明基本的实用审美已经被整得退化了。
技术上这种东西还真不如 () 加 tag,因为用 () 在文法歧义之前已经直接承认语义上的潜在歧义,因此正常的设计中会更积极地消歧义(如通过另外加关键字)。
无条件混用 <> 仍然是垫底的弟弟设计。
FrankHB
2020-06-18 09:32:54 +08:00
@Balthild C++ 反人类的设计显然包括不知所谓的本该避免的文法歧义,使用 <> 多出来的问题就是 C++ 反人类设计的典型杰出代表之一,这不因为其它问题更拉仇恨而改变。你没有一下子搞清楚这点,而强调“并不一定”,看来是不够熟悉 C++ 。(事实是,不想硬抄 instantiation phase 而老实写形式语法的根本没法在实用上绕过这坨○。)
虽然其它许多用 <> 的语言并没有那么夸张的歧义问题,但是用 <> 的必要性仍然相当莫名其妙,有不尊重语用来源之嫌。
选择照抄 C++ 这样设计的语言设计者和语言的用户,大概也不一定了解 C++ 在这方面的历史包袱。而选择不照抄 C++ 却同样使用这种糟粕设计的语言设计者,大概至少一样无可救药(至少没几个语言有当初 C++ 对 basic source character set 那么纠结的需求,也不是事后才扩展出 template 的)。
Darain
2020-06-18 09:45:39 +08:00
我最早看到 golang 2.0 说要支持泛型还是在 8102 年
releaseme
2020-06-18 09:49:38 +08:00
@cmdOptionKana 下意识觉得你在黑 Go,再读一遍又觉得不对
allenhu
2020-06-18 09:51:59 +08:00
该有的你还得有 doge
gravitybox
2020-06-18 10:18:20 +08:00
func Print(type T)(s []T) (int, string){
return 0, ""
}

这括号也太多了吧
rockyou12
2020-06-18 10:21:19 +08:00
@FrankHB 你说这些有啥用 lisp 、Haskell 美不美?搬砖好不好用?
notamail
2020-06-18 12:17:00 +08:00
@lithbitren 你可以看看 container/list

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/682238

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX