如何看待go语言泛型的最新设计?

 我来答
年轻的动漫安利君
2020-06-27 · TA获得超过1721个赞
知道大有可为答主
回答量:5720
采纳率:78%
帮助的人:163万
展开全部
大部分吐糟都在表示这种设计本着原来很成熟的<>方案不用,分要发明自己的(), 看起来不好看、怪异~~~ 不过我觉得这种设计还是蛮好的,为什说好呢,因为人家本来就不是奔着 <> 去的。

在 java/C#/C++ 中,使用 <> 语法给人的直观感觉是这是一种约定或者是对函数/类的装饰,这种约定让一个方法具备了泛型能力。粗看之下 Go 是把 <> 换成了 () 所以语法顿时变得怪怪的~~~

但是,在 Go 的这种设计中这压跟就不是<>语法的约定/装饰的意义,人家就是一个踏踏实实的方法,你调用 Foo(int, int) 的时候其实就是调用一个泛型方法,传入的是类型参数、返回的是具体类型的方法,这么一看豁然开朗~~ 而且特别容易理解和使用。

比如我们可以写这样的语句:
func IntAbs = math.ABS(int);
func FloatAbs = math.ABS(float);
而在其它语言中(比如Java/C#),你肯定不能写:
IntAbs = math.Abs<int>
当然在实际使用中,编译器会自动推导出类型,所以使用的时候大多我们是可以直接用 而不是
a个人还是挺喜欢 Go 的这个设计的,非常的平滑没有对之前的东西造成破坏,而且还有一定的想象空间,如果以后类型也能变成可计算、可编程的,那么 Go 语言将能实现更多复杂的功能,而且它的实现成本非常非常的低。

Java和C#的泛型设计都是一个路子采用 <> 的设计,这种设计我以前用的也是蛮多的,这是一种约定式的语法,这种语法在简单场景下还是挺好用的,但是在复杂场景下代码的可读性会非常差。Go 语言其实提供了一种完全不一样的路子,不约定而是创造,这种思路让你看到了泛型的实现过程同时保持了很高的灵活性,个人觉得还是很符合 Go 的大道至简的信条的~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
残叶落one1
2020-06-27 · TA获得超过1394个赞
知道小有建树答主
回答量:3727
采纳率:92%
帮助的人:106万
展开全部
像 C# 和 Java 也可以使用 unsafe 来访问更底层,而高级封装,Go 语言只是抽象了一些用 C 实现起来特别繁重,坑特别多的东西.就像 slice 简化了对数组的操作和处理,而 channel 什么的,让实现并发逻辑简洁又高效,让程序员可以有更多精力聚焦业务逻辑的设计,而不是关心这个锁,那个锁.但要说到语言设计的优劣,Go语言确实没太多亮点.特别是处理数据库数据和 JSON类似的数据还是和其他强类型语言一样,麻烦又繁琐.
但在工程上,或者实际项目上,它有无可匹敌的几大优势:
1. 容易部署,比任何一种能胜任商业项目的语言都要简单,干练.
2. 由于语言设计的硬性规则,让执行一套辅助开发的工具,更好实现.比如代码格式化,代码分析.(虽然有点没人性,但很适合发挥团队效益)
3. 也因为硬性规则,编译时间特别快.
4. 也因为硬性规则,单元测试起来也很方便,基本可以实现边写边测.这种特性有时候很有用.
5. 因为编译时间快和部署的相对简单,它也能像动态语言一样,做一些类似脚本的工作.不需要像 Java 和 C# 一样,做点小事情,也要一个硕大的运行库,什么都要正规正矩的设计几个接口,不然重用起来很难.
再者很少有大项目,不需要或多或少的触碰一下底层来突破性能瓶颈,或者加速项目开发的.
比如说在 Go 语言里, 可以用 unsafe.Pointer(不需在内存上拷贝数据) 在 []byte 和 string 之间进行转换.
总而言之,Go 语言是一种进可攻退可守的语言.可以偏向效率的很快开发一个项目,可以为了性能,不断的优化数据结构,不断的开发硬件的性能.像 C# 和 Java 也可以使用 unsafe 来访问更底层,而高级封装,Go 语言只是抽象了一些用 C 实现起来特别繁重,坑特别多的东西.就像 slice 简化了对数组的操作和处理,而 channel 什么的,让实现并发逻辑简洁又高效,让程序员可以有更多精力聚焦业务逻辑的设计,而不是关心这个锁,那个锁.但要说到语言设计的优劣,Go语言确实没太多亮点.特别是处理数据库数据和 JSON类似的数据还是和其他强类型语言一样,麻烦又繁琐.但在工程上,或者实际项目上,它有无可匹敌的几大优势:1. 容易部署,比任何一种能胜任商业项目的语言都要简单,干练.2. 由于语言设计的硬性规则,让执行一套辅助开发的工具,更好实现.比如代码格式化,代码分析.(虽然有点没人性,但很适合发挥团队效益)3. 也因为硬性规则,编译时间特别快.4. 也因为硬性规则,单元测试起来也很方便,基本可以实现边写边测.这种特性有时候很有用.5. 因为编译时间快和部署的相对简单,它也能像动态语言一样,做一些类似脚本的工作.不需要像 Java 和 C# 一样,做点小事情,也要一个硕大的运行库,什么都要正规正矩的设计几个接口,不然重用起来很难.再者很少有大项目,不需要或多或少的触碰一下底层来突破性能瓶颈,或者加速项目开发的.比如说在 Go 语言里, 可以用 unsafe.Pointer(不需在内存上拷贝数据) 在 []byte 和 string 之间进行转换.总而言之,Go 语言是一种进可攻退可守的语言.可以偏向效率的很快开发一个项目,可以为了性能,不断的优化数据结构,不断的开发硬件的性能.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
橘猫王
2020-06-27 · TA获得超过1474个赞
知道小有建树答主
回答量:1.5万
采纳率:40%
帮助的人:422万
展开全部
像 C# 和 Java 也可以使用 unsafe 来访问更底层,而高级封装,Go 语言只是抽象了一些用 C 实现起来特别繁重,坑特别多的东西.就像 slice 简化了对数组的操作和处理,而 channel 什么的,让实现并发逻辑简洁又高效,让程序员可以有更多精力聚焦业务逻辑的设计,而不是关心这个锁,那个锁.但要说到语言设计的优劣,Go语言确实没太多亮点.特别是处理数据库数据和 JSON类似的数据还是和其他强类型语言一样,麻烦又繁琐.
但在工程上,或者实际项目上,它有无可匹敌的几大优势:
1. 容易部署,比任何一种能胜任商业项目的语言都要简单,干练.
2. 由于语言设计的硬性规则,让执行一套辅助开发的工具,更好实现.比如代码格式化,代码分析.(虽然有点没人性,但很适合发挥团队效益)
3. 也因为硬性规则,编译时间特别快.
4. 也因为硬性规则,单元测试起来也很方便,基本可以实现边写边测.这种特性有时候很有用.
5. 因为编译时间快和部署的相对简单,它也能像动态语言一样,做一些类似脚本的工作.不需要像 Java 和 C# 一样,做点小事情,也要一个硕大的运行库,什么都要正规正矩的设计几个接口,不然重用起来很难.
再者很少有大项目,不需要或多或少的触碰一下底层来突破性能瓶颈,或者加速项目开发的.
比如说在 Go 语言里, 可以用 unsafe.Pointer(不需在内存上拷贝数据) 在 []byte 和 string 之间进行转换.
总而言之,Go 语言是一种进可攻退可守的语言.可以偏向效率的很快开发一个项目,可以为了性能,不断的优化数据结构,不断的开发硬件的性能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何如去
2020-06-29 · TA获得超过2444个赞
知道大有可为答主
回答量:6067
采纳率:100%
帮助的人:222万
展开全部
哇。。。要不要专门点我嘛。。。
其实按照如意金箍棒,它的控制指令词语就五个:长短粗细停。衍生出来的什么快一点、慢一点、够了(性情乱入)。PS:楼下自重啊~我说的是变长得快一些~;这些词语好在不复杂、不算多,可以早期就编写进去。短词语的识别度高,数量少也能保证不会误识别~
语音识别要提取出来这几个词语也不难。
稍微麻烦的可能是专人专用,这个建立一个语音库的那啥来着。。。。每个人发音的音色、频率都不一样,不过现在仿佛也有声纹识别的。每个人的声音甚至像指纹一样是独有的哦~
脑电波这个玩意目前的设备还不能太小,而孙悟空那个的头箍又是在金箍棒之后赠送的。要我看,可能连语音识别都不太算,悟空可以捏住金箍棒的某个部位,让它变长变硬(感觉有点不对劲~),压力传感器就比语音识别好做多了。
以上都是在电的范围内的,接下来到了材料,我记得压电晶体可以把电信号转换成机械振动的~那么其实材料也不远的~通电就伸、缩什么的~
材料不是我管的范围~术业有专攻哦也~有人做出了材料可以寻求合作。。。
不过。。。魔术用的伸缩匕首算不算??如果伸缩不考虑高科技。。。伸缩晾衣杆什么的~

16
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lida521zm
2020-06-27 · 超过108用户采纳过TA的回答
知道小有建树答主
回答量:1930
采纳率:60%
帮助的人:116万
展开全部
像 C# 和 Java 也可以使用 unsafe 来访问更底层,而高级封装,Go 语言只是抽象了一些用 C 实现起来特别繁重,坑特别多的东西.就像 slice 简化了对数组的操作和处理,而 channel 什么的,让实现并发逻辑简洁又高效,让程序员可以有更多精力聚焦业务逻辑的设计,而不是关心这个锁,那个锁.但要说到语言设计的优劣,Go语言确实没太多亮点.特别是处理数据库数据和 JSON类似的数据还是和其他强类型语言一样,麻烦又繁琐.
但在工程上,或者实际项目上,它有无可匹敌的几大优势:
1. 容易部署,比任何一种能胜任商业项目的语言都要简单,干练.
2. 由于语言设计的硬性规则,让执行一套辅助开发的工具,更好实现.比如代码格式化,代码分析.(虽然有点没人性,但很适合发挥团队效益)
3. 也因为硬性规则,编译时间特别快.
4. 也因为硬性规则,单元测试起来也很方便,基本可以实现边写边测.这种特性有时候很有用.
5. 因为编译时间快和部署的相对简单,它也能像
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式