Go的类型系统

Go的类型系统和结构struct

一.命名类型

1.基础

Go是强类型的语言,编译器在编译时会进行严格的类型校验。

Go的类型可以分为命名类型和未命名类型两类。

2.命名类型

1.类型可以通过标识符来表示,这种类型称为命名类型。Go语言的基本类型中有20个预声明简单类型都是命名类型(int、int16、int64、byte、string等)

2.Go语言还有一种命名类型——用户自定义类型,就是用关键字type来定义的新类型,如前面曾经遇到过的定义函数类型。

3.未命名类型

1.一个类型由预声明类型、关键字和操作符组合而成,这个类型称为未命名类型。未命名类型又称为类型字面量(Type Literal)。

2.Go 语言的基本类型中的复合类型:数组、切片、字典、通道、指针、函数、结构和接口都属于类型字面量,也都是未命名类型。例如*int、[ ]int、[3]int、map[string]int等都是未命名类型。

4.自定义类型

格式:type 新类型名 原类型表达式

自定义类型都是命名类型。

自定义类型举例
type Map map[string]int     索引为字符串,键值为整数的字典
type Fun func(int, int) int 接收两个整型参数并返回一个整数的函数
type Slice [ ]int            整数切片
type Str [4]string          大小为4的字符串数组
说明:可以使用Printf函数结合%T格式符输出数据类型,%v输出数据值。

5.强制类型转换

格式:a T = (T)(b),用括号将类型和要转换的表达式括起来(类型也可以不括)。

注意:
数值类型和string类型之间的相互转换可能造成值部分丢失;其他的转换仅是类型的转换,不会造成值的改变。

字符串和数字之间的转换可使用标准库strconv。

二.结构struct

1.结构体定义

GO语言中也和C语言一样,可以声明新的类型作为其它类型的属性或字段的容器。这个工具就是struct。

type person struct {
name string
age int
}

一般使用类型定义关键字type将结构体赋予一个新的类型名,比如上面的结构体就有一个新的类型名person,后面使用person这个类型就可以定义结构体变量。

定义结构体变量及初始化
var a person // 直接定义person类型的变量
var b person = person{name: “dhjasd”, age: 20} //定义初始化

结构体变量
P1 := person{“hdjajda”, 25} // 按照顺序提供初始化值
P2 := person{age:24, name: “djajkddk”} // 通过field:value的
方式初始化,这样可以任意顺序

P3 := new(person) // 用new函数分配一个指针,此处P的类型为*person
P4 := person{}

2.struct的匿名字段

GO支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段。

当匿名字段是一个struct的时候,那么这个struct所拥有的全部字段都被隐式地引入到当前定义的这个struct。

type person struct {
    name string //姓名
    age  int    //年龄
}
type student struct {
person // 匿名字段,意思是student包含了person的所有字段
xuehao string
}

使用匿名字段
a := student{person{“aaaa”, 25}, “20101101000”} // 初始化一个学生
fmt.Println("name is ", a.name) // 访问成员
a.age += 2 // 修改成员
a.person = person{“dsadhsa”, 55} // 直接访问匿名字段
a.person.age -= 1 // 通过匿名字段访问其成员
on = person{“dsadhsa”, 55} // 直接访问匿名字段
a.person.age -= 1 // 通过匿名字段访问其成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值