Go-自定义类型

用户自定义类型

文章目录

  • 用户自定义类型
    • 1. 创建自定义类型
    • 2. 自定义类型赋值
    • 3. 独立的自定义类型
    • 参考:

动态语言与静态语言实际上是指动态类型语言与静态类型语言
静态类型语言

数据类型检查发生才编译阶段,需要先声明变量的数据类型
 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类型任然是一个独立的类型

参考:

动态语言&静态语言
静态语言与动态语言的区别

你可能感兴趣的:(Go-自定义类型)