Go 数据类型

本章介绍如下内容: 

  • 数据类型是什么?
  • 区分静态类型和动态类型
  • 使用布尔类型
  • 理解数值类型
  • 检查变量的类型
  • 类型转换

  Go 是一种静态类型语言,而静态类型是一个必须理解的概念。如果您没有接触过静态类型语言,这个概念的理解尤为重要。

1.1 数据类型是什么

  数据类型让编程语言、编译器、数据库和代码执行环境知道如何操作和处理数据。例如,如果数据类型为数字,通常可对其执行数学运算。编程语言和数据库常常根据数据类型赋予程序员不同的功能和性能。大多数编程语言还提供了用于处理常见数据的标准库,而数据库提供了查询语言,让程序员能够根据底层数据类型来查询数据以及与之交互。无论数据类型是否被显示地声明,它们都是重要的编程和计算结构。

1.2 区分静态类型和动态类型

  所谓强类型语言,指的是错误地使用了类型时,编译器将引发错误;所谓动态类型(也叫松散类型或弱类型)语言,指的是为了执行程序,运行时会将一种类型转换为另一种类型,或者编译器没有实现类型系统。哪种语言更好呢?这存在很大争议,计算机科学家看重强类型语言的正确性和安全性,而其他人则看重动态语言的简单性和开发速度。

  下面是静态类型语言的一些优点:

  • 性能高于动态类型语言。
  • Bug 通常会被编译器发现。
  • 代码编辑器可提供代码不全和其他功能。
  • 数据完整性更好。

  下面是动态类型语言的一些优点:

  • 使用动态类型语言编写软件的速度通常更快。
  • 无须为执行代码而等待编译器完成编译。
  • 动态类型语言通常不那么死板,因此有些人认为变更代码更容易。
  • 有些人认为动态类型语言门槛更低。

  在 Go 中,程序员可显示地声明类型,也可让编译器推断类型。这里我们将显示地声明类型:

GO从入门到精通——数据类型_静态类

  从sayHello函数的参数声明可知,这个函数接受一个类型为 string 的参数;这个函数的返回值也是字符串。因此,编译这个程序时,编译器将检查传递给这个函数的参数是否是字符串;如果不是,编译器将发生错误。这正是我们希望的,因为这意味着错误可能根本不会让用户遇到。 

  Python 也是强类型语言,我们再看看 Python 的函数,它接受两个值,将它们相加并返回结果:

>>> def func(a,b):
...     return a + b;
... 

  给这个函数提供两个数字时,它能够正确地运行:

GO从入门到精通——数据类型_编译器_02

  然而,如果向它传递一个数字和一个字符串呢?

 GO从入门到精通——数据类型_动态类型_03

 

  我们再尝试弱类型语言 Javascript 函数,它也接受两个值,将它们相加并返回结果。