动态和动静的概念
动态
动态绑定是指在程序运行前就曾经晓得办法是属于那个类的,在编译的时候就能够连贯到类的中,定位到这个办法。. 动态绑定产生于数据结构和数据结构间,程序执行之前。. 动态绑定产生于编译期,因而不能利用任何运行期的信息。. 它针对函数调用与函数的主体,或变量与内存中的区块。.
动静
动静绑定(前期绑定)是指在程序运行过程中,依据具体的实例对象能力具体确定是哪个办法。. 动静绑定则针对运行期产生的拜访申请,只用到运行期的可用信息。. 在面向对象的代码中,动静绑定意味着决定哪个办法被调用或哪个属性被拜访,将基于这个类自身而不基于拜访范畴。
动态和动静的例子
动态类型语言和动静类型语言
对于动态语言和动静语言
Go 语言是一门动态编译型语言,是一门强类型语言。但在 go 语言中也提供了相似于动静语言的性能。
和其它语言相比,Go 语言是惟一联合了接口值,动态类型查看(是否该类型实现了某个接口),运行时动静转换的语言,并且不须要显式地申明类型是否满足某个接口。该个性容许咱们在不扭转已有的代码的状况下定义和应用新接口。
接管一个(或多个)接口类型作为参数的函数,能够被实现了该接口的类型实例调用。实现了某个接口的类型能够被传给任何以此接口为参数的函数。
相似于 Python 和 Ruby 这类动静语言中的动静类型(duck typing);这意味着对象能够依据提供的办法被解决(例如,作为参数传递给函数),而疏忽它们的理论类型:它们能做什么比它们是什么更重要。
像 Python,Ruby 这类语言,动静类型是提早绑定的(在运行时进行):办法只是用参数和变量简略地调用,而后在运行时才解析(它们很可能有像 responds_to 这样的办法来查看对象是否能够响应某个办法,然而这也意味着更大的编码量和更多的测试工作)。
Go 语言的实现与此相反,通常须要编译器动态查看的反对:当变量被赋值给一个接口类型的变量时,编译器会查看其是否实现了该接口的所有函数。如果办法调用作用于像 interface{} 这样的“泛型”上,能够通过类型断言来查看变量是否实现了相应接口。
go 语言中的动态函数和动静函数
动静函数
go 中的接口类型实现了动静的成果:
Go 语言试图让程序员能在平安和灵便的编程之间获得一个均衡。它在提供严格的类型查看的同时,通过接口类型实现了对鸭子类型的反对,使得平安动静的编程变得绝对容易。
并且在 go1.17 中引入了泛型的概念
动态函数
因为 go 语言属于动态类型语言,每个变量在定义时都会被赋予固定的值。
go 中也没有类的概念,每个办法与对应的变量绑定
所以在 go 中个别的函数和办法都是属于动态的函数
参考
https://www.cnblogs.com/wongb…
http://c.biancheng.net/view/8…
http://c.biancheng.net/view/5…