此页面http://golang.org/doc/go_faq.html写道:
尽管Go具有静态类型,但该语言尝试使类型感到比典型的OO语言更轻量
所以我的问题恰恰是它是使用泛型(例如C#)安全地键入还是使用松散类型(例如javascript)或可选(例如Vb.Net中的option严格)安全地键入?
此页面http://golang.org/doc/go_faq.html写道:
尽管Go具有静态类型,但该语言尝试使类型感到比典型的OO语言更轻量
所以我的问题恰恰是它是使用泛型(例如C#)安全地键入还是使用松散类型(例如javascript)或可选(例如Vb.Net中的option严格)安全地键入?
Answers:
类型安全是否不是黑白类型安全。它的使用范围更广,某些语言的类型安全性可能比其他语言更高(反之亦然)。但是,我认为您对C#和Javascript的想法可能是静态类型(在编译时进行类型检查)与动态类型(在运行时进行类型检查)-当然,那是Go FAQ在说什么。
Google Go是静态类型的,但是许多功能使它看起来(至少在某种程度上)是动态类型的。例如,您无需将类明确标记为实现任何接口。如果您的类的方法签名与接口上的方法签名匹配,则您的类会自动实现该接口(一种鸭子式输入)。这对于扩展内置类和第三方库中的类很有用,因为您只需组成接口以匹配第三方类上的方法,它将自动实现它。
类型安全实际上是类型系统的另一个“轴”。例如,C是一种静态类型的语言,它不是类型安全的-指针使您几乎可以做任何您喜欢的事情,甚至会崩溃程序。Javascript是动态键入的,但也是类型安全的:您无法执行会使程序崩溃的操作。C#主要是类型安全的,但是您可以显式标记unsafe
那些已经不再执行类型安全的代码区域,并且可以做一些不再是类型安全的事情。
Google Go也是类型安全的,即您不会弄乱类型并使程序崩溃(不能直接访问指针)。
安全键入该类型将永远不会引起误解,但是错误类型可能导致程序崩溃。
Go的地图类型不是线程安全的,它是静态类型的。它也没有任何类型继承,通用编程,断言,方法重载或指针算术,这都是有充分理由的。
类型安全性和存储安全性是长期目标,这是一个问题。
类型安全性带来了可以接受的开销(以千字节和兆字节为单位)。Go是使用MapReduce和“大数据”设计的,数据量为PB级,这会带来类型安全性方面的性能问题,类型检查(装箱/拆箱)会增加系统开销,并缩短处理周期。
类型安全性在子类型和多态性以及鸭子类型(将对象投射到对象)中可能受到限制,这会带来危险,还会给Go之类的语言带来巨大好处。C ++和Java不会被Go取代,它是帮助分布式编程和大规模并行系统的一种新语言。
布鲁斯·埃克尔(Bruce Eckel)的一句大话“对于C ++最初打算解决的问题类别来说,意义更大”,这值得商bat。C ++是一种非常有效的语言,而MapReduce的Boost实现非常有效。
并发原语是未来。类型安全一直是一个非常有争议的话题,Go可能是20年来或自Algol以来解决该问题的第一语言。