用户自定义类型
动态语言与静态语言实际上是指动态类型语言与静态类型语言
静态类型语言
数据类型检查发生才编译阶段,需要先声明变量的数据类型
eg: C C++ Go优势
1.由于类型的强制声明,使得IDE有很强的代码感知能力,故,在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中,依托IDE对系统的开发很有保障;
2.由于静态语言相对比较封闭,使得第三方开发包对代码的侵害性可以降到最
动态类型语言
是指运行周期才会数据类型检查的语言,再用动态语言编程时,不用给变量指定数据类型,而是在第一次赋值时,将内部数据类型记录下来<程序运行时可以改变其结构: 新的函数可以被引用,已有的函数可以被删除等在结构上变化
eg: Python JaveScript Ruby优势:
1.思维不受束缚,可以任意发挥,把更多的精力放在产品本身上
2.集中思考业务逻辑实现,思考过程即实现过程;
类型安全与是不是动态语言没有必然关系
1. 创建自定义类型
关键字 struct
// 定义一个学生的自定义类型
type student struct(
name string
age int
class int
gender bool
)
// 结构声明变量
// 声明student类型的变量
var rain student
// 使用结构字面量声明变量
rain:=student{
name: "Rain",
ageL 12,
class 5,
gender true,
}
// 声明student 类型的变量的值
// 必须更声明的结构的字段顺序一致
lisa:=student{"Rain", 12, 5, true}
结构字面量声明结构类型
// 使用字面量声明student类型的变量, 并初始化值
student{
name: "Rain",
age: 12,
class: 5,
gender: true,
}
2. 自定义类型赋值
使用其他结构类型声明字段
// 创建一个Student 的 student类型,level 的 string类型,age 的 int 类型
type teacher struct{
Student student
level string
age int
}
// 其他结构赋值
rain := teacher{
Student: {
name: "mist",
age: 12,
class: 5,
gender: false,
},
level: "5级",
age: 32
}
3. 独立的自定义类型
两种不同类型的值,即使相互兼容,也不能相互赋值,编译器不会对不同类型的值做隐示式换
// 即使
type c_time int64
var dur c_time
dur = int64(1000)
// rsp: cannot use int64(1024) (type int64) as type dur in assignment
// 类型int64的值不能作为 dur 的值来用, 虽然int64 是基础类型, 然而c_time类型任然是一个独立的类型