2.2静态类型与动态类型

2.2静态类型与动态类型

静态类型是指由编译器在编译阶段处理有关类型的检查和计算,一旦发现代码中存在类型错误,即宣告编译失败:

  • 运行阶段不再处理有关类型的问题,性能高速度快
  • 代码中的缺陷充分暴露在编译阶段,运行时更安全
  • 代码编辑器可提供代码自动补全等人性化辅助功能
  • 数据完整性更好

在Go语言中,代码编写者可以为数据显式地声明类型,也可以让编译器自动推断其类型,但无论那种情况,在编译器看来,数据终归是需要类型的。

// Go语言中的类型
// addition函数指出它接受两个int类型的参数,并返回一个int类型的返回值。如果调用者错误地将一个字
// 符串传给该函数,编译器将捕获这个错误
package main

import "fmt"

func addition(x int, y int) int {
    return x + y
}

func main() {
    fmt.Println(addition(1, 3))
    fmt.Println(addition(1, "3"))
}
// 打印输出:
cannot use "3" (type string) as type int argument to addition 

 

动态类型是指在运行阶段处理有关类型的检查和计算,并可根据需要将一种类型的数据自动转换为另一种类型。

  • 语法简单,编写代码速度快
  • 无须为执行代码等待编译器完成编译
  • 语言规则不死板,易于变更代码,好维护
  • 学习门槛更低

Go语言虽然不是动态类型语言,但它借鉴了包括Python在内的很多动态类型语言的优点,至少在形式上比传统意义上的静态类型语言更加简洁,同时又不失安全性。

//简单的JavaScript函数
// 虽然JavaScript有类型的概念,但其使用规则却非常宽松。在第二个对addition函数的调用中,JavaScript
// 对整数1执行类型转换,将其转换为字符串"1",进而返回字符串"13"而非整数4。这将引发灾难性的BUG
var addition = function(x, y) {
	return x + y;
};

addition(1, 3) // 4
addition(1, "3")	//13

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值