接下来的的内容比较适合新手,如果之前有编程经验的老手下面的内容比较容易理解
数据类型是什么
数据类型让编程语言、编译器、数据库和代码执行环境知道如何操作 和处理数据 。例如 , 如果数据类型为数字,通常可对其执行数学运算。编程语言和数据库常常根据数据类型赋予 程序员不同的功能和性能。大多数编程语言 还提供了用 于处理常 见数据的标准库,而数据 库 提供了查询语言 ,让程序员能够根据底层数据类型来查询数据 以及与之交互 。无论数据类型 是否被显式地声明 ,它们都是重要的编程和计算结构。
区分静态类型和动态类型
(通常称为强类型和若类型语言)
所谓强类型语言 ,指的是错误地使用了类型时,编译器将引发错误 :所谓动态类型(也 叫松散类型或弱类型)语言,指的是为了执行程序,运行时会将一种类型转换为另一种类型,或者编译器没有实现类型系统。哪种语言更好呢?这存在很大的争议,计算机科学家看重强类型语言的正确性和安全性,而其他人则看重动态语言的简单性和开发速度。
下面是静态类型语言的一些优点 。
> 性能高于动态类型语言。
> Bug 通常会被编译器发现 。
> 代码编辑器可提供代码补全和其他功能 。
> 数据完整性更好 。 下面是动态类型语言的一些优点 。
> 使用动态类型语言编写软件的速度通常更快。
> 无须为执行代码而等待编译器完成编译 。
> 动态类型语言通常不那么死板,因 此有些人认为变更代码更 容易。
> 有些人认为动态类型语言学习门 槛更低 。
在go语言中,可以让编译器判断类型也可以显式的声明类型
package main
import (
"fmt"
)
func sayHello(s string) string{
return "Hello" + s
}
func main (){
fmt.Println(sayHello("boot"))
#根据代码可以看出,调用的sayHello方法,
指定了参数必须为string类型,
尝试使用非string类型入参则会产生报错
}
弱类型示例(使用js)
var addition = function (a, b) {
return x + y;
};
这里使用全部使用string类型也可以,使用数字加string类型也可以,在运行时以及输出结果不会有问题,看起来貌似很强大,但是这种松散型的管理会发生灾难后果,例如:当我需要把这个方法返回的数据存储到数据库中时,因为我们都知道在数据库中例如Mysql创建字段时候是要声明字段类型的,而这种松散的管理会使得程序出现非常大的问题,换言之相当于需要人来控制而非程序帮我们进行控制。
基本数据类型
当然本期的主题是理解类型,那我们现在就知道了,在go中基本数据类型包含
1、string
声明方法
var s string = "boot" #这里我们可以看到在java中字符串非基本数据类型而go中属于基本数据类型,另外在写法上var类似于js写法,变量名与类型与java是反过来的,变量名在前类型在后
2、布尔
声明方法
var b bool #这里的布尔写法相较于在java中更加简便(boolean),但是一样的是默认值均为false
3、整数
声明方法
var i int
4、浮点数
声明方法(推荐使用float64)
var float32 = 0.11
var float64 = 0.11
5、数组
声明方法
var beatles [4]string
赋值方法
beatles[0] = "boot"
beatles[1] = "boot1"
数据类型检查
go提供了reflect包,用于检查数据类型
package main
import (
"fmt"
"reflect"
)
func main(){
var test [4]string
test[0] = "boot"
fmt.Println(test)
var int [4]int
int[0] = 1
fmt.Println(int)
fmt.Println(reflect.TypeOf(int))
}
#输出结果
[boot ]
[1 0 0 0]
[4]int
数据类型转换
go中提供了strconv包,提供了数据类型的转换
package main
import (
"fmt"
// "reflect"
"strconv"
)
func main(){
var b string = strconv.FormatBool(true)
fmt.Println(b)
}
#结果输出
true
另外,在go语言中如果引用的包和变量没有被使用会报错
"reflect" imported and not used / s declared and not used