【Go 语言核心编程】知识点记录——第三章类型系统

Go语言的类型系统分为命名类型、非命名类型、底层类型、动态类型和静态类型等。

命名类型

类型可以通过标识符来表示,这种类型称为命名类型。Go语言的基本类型中有20个预声明简单类型都是命名类型,Go语言还有一种命名类型——用户自定义类型。

未命名类型

一个类型由预声明类型、关键字和操作符组合而成,这个类型称为未命名类型。未命名类型又称为类型字面量。Go语言中的数组、切片、字典、通道、指针、函数字面量、结构和接口都属于类型字面量。

package main

import "fmt"

//使用type声明的是命名类型
type Person struct{
	name string
	age int
}

func main(){
	//使用struct字面量声明的是未命名类型
	a := struct{
		name string
		ange int
	}{"andes",18}
	fmt.Printf("%T\n",a)//struct{name string;age int}
	fmt.Printf("%v\n",a)//{andes,18}

	b := Person("tom",20)
	fmt.Printf("%T\n",b)//main.Person
	fmt.Printf("%v\n",b)//{andes,18}
	 
}

底层类型

所以类型都有一个底层类型,其规则如下:

  1. 预声明类型和类型字面量的底层类型是它们自身
  2. 自定义类型type newtype oldtype 中的newtype 的底层类型是逐层递归向下查找的,直到查到的oletype是预声明类型或类型字面量为止。

类型相同

1.两个命名类型相同的条件是两个类型声明的语句完全相同。
2. 命名类型和未命名类型永远不相同
3. 两个未命名类型相同的条件是它们的类型声明字面量的结构相同,并且内部元素的类型相同。
4. 通过类型别名语句声明的两个类型相同。(如type T1=T2

类型可直接赋值var b T2 = a

  1. T1和T2的类型相同
  2. T1和T2具有相同的底层类型,并且T1和T2里面至少有一个是未命名的类型。
  3. T2是接口类型,T1是具体类型,T1的方法集是T2方法集的超集
  4. T1和T2都是通道类型,他们拥有相同的元素类型,并且T1和T2中至少有一个是未命名类型
  5. a是预声明标识符nil,T2是pointer,function,slice,map,channel,interface类型中的一个
  6. a是一个字面常量值,可以用来表示类型T的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值