本章介绍如下内容:
- 数据类型是什么?
- 区分静态类型和动态类型
- 使用布尔类型
- 理解数值类型
- 检查变量的类型
- 类型转换
Go 是一种静态类型语言,而静态类型是一个必须理解的概念。如果您没有接触过静态类型语言,这个概念的理解尤为重要。
1.1 数据类型是什么
数据类型让编程语言、编译器、数据库和代码执行环境知道如何操作和处理数据。例如,如果数据类型为数字,通常可对其执行数学运算。编程语言和数据库常常根据数据类型赋予程序员不同的功能和性能。大多数编程语言还提供了用于处理常见数据的标准库,而数据库提供了查询语言,让程序员能够根据底层数据类型来查询数据以及与之交互。无论数据类型是否被显示地声明,它们都是重要的编程和计算结构。
1.2 区分静态类型和动态类型
所谓强类型语言,指的是错误地使用了类型时,编译器将引发错误;所谓动态类型(也叫松散类型或弱类型)语言,指的是为了执行程序,运行时会将一种类型转换为另一种类型,或者编译器没有实现类型系统。哪种语言更好呢?这存在很大争议,计算机科学家看重强类型语言的正确性和安全性,而其他人则看重动态语言的简单性和开发速度。
下面是静态类型语言的一些优点:
- 性能高于动态类型语言。
- Bug 通常会被编译器发现。
- 代码编辑器可提供代码不全和其他功能。
- 数据完整性更好。
下面是动态类型语言的一些优点:
- 使用动态类型语言编写软件的速度通常更快。
- 无须为执行代码而等待编译器完成编译。
- 动态类型语言通常不那么死板,因此有些人认为变更代码更容易。
- 有些人认为动态类型语言门槛更低。
在 Go 中,程序员可显示地声明类型,也可让编译器推断类型。这里我们将显示地声明类型:
从sayHello函数的参数声明可知,这个函数接受一个类型为 string 的参数;这个函数的返回值也是字符串。因此,编译这个程序时,编译器将检查传递给这个函数的参数是否是字符串;如果不是,编译器将发生错误。这正是我们希望的,因为这意味着错误可能根本不会让用户遇到。
Python 也是强类型语言,我们再看看 Python 的函数,它接受两个值,将它们相加并返回结果:
>>> def func(a,b): ... return a + b; ...
给这个函数提供两个数字时,它能够正确地运行:
然而,如果向它传递一个数字和一个字符串呢?
我们再尝试弱类型语言 Javascript 函数,它也接受两个值,将它们相加并返回结果。