go语言数据类型

go语言数据类型,第1张

go语言数据类型 1. 数据类型的分类
  • 基础类型
    • 数字,字符串,布尔型
  • 复合类型
    • 数组,结构体 通过组合简单类型
  • 引用类型
    • 指针,切片,字典,函数,通道
  • 接口类型
    • 接口
2. 复合类型
  • 数组
    • 支持比较
    • 容量也是类型的一部分
    • 是值类型
  • 结构体
    • 支持比较(但如果成员含有不可比较的类型,则不能进行比较)
    • 结构体可以实现面向对象,序列化,继承
    • 也只值类型。默认是值传递
3. 引用类型 3.1 指针
  • 所有的值类型都有对应的指针
  • 所有的引用类型也都有其指针,但是这个意义就不是很大(类似指针的指针)
  • new(T):为T类型分配空间,并返回T类型的指针。一般用于对基本类型的指针的初始化
  • make(T):用于内存分配,只用于slice,map,chan的内存创建(初始化),返回的是引用本身
3.2 切片
  • 引用类型,内部结构包括底层数组指针,长度,容量
  • make([]T,size,cap)
  • len(s)==0:判断切片是否为空
  • s==nil:判断切片是否未初始化
  • func append(slice []Type, elems ...Type) []Type:切片的追加
  • func copy(dst []Type, src []Type) int:切片的复制
  • a = append(a[:index], a[index+1:]...):没有专门的删除方法,可以通过这个语句来实现
3.3 map
  • 引用类型,必须初始化之后才能使用
  • make(map[KeyType]ValueType, [cap])
  • func delete(m map[Type]Type1, key Type)
  • map也不可比较
3.4 函数
  • 函数也是一种引用类型
  • type calculation func(int, int) int:定义一个函数类型
  • 函数类型的变量只能通过赋值进行初始化
3.5 通道
  • 引用类型,必须初始化之后才能使用
  • channel支持==,如果两个channel引用同一个对象,则返回为true
  • 通道需要通过make初始化 : ch:=make(chan int)
  • 管道有点像java的阻塞队列
  • 没有使用协程的情况下,如果channel数据取完了,再取就会包deadlock
  • 声明管道时,可以约束为只读或只写,但只是起到编译器检查的作用(一般用于函数形参处)
  • var chan1 chan<- int:声明只写管道
  • var chan2 <-chan int:声明只读管道
4. 接口类型
  • 任何类型都实现了空接口
  • 接口的定义
type 接口类型名 interface{
    方法名1( 参数列表1 ) 返回值列表1
    方法名2( 参数列表2 ) 返回值列表2
    …
}
  • var 接口变量名 接口类型名:声明一个接口类型的变量
  • 当值接受者实现接口时:无论是结构体还是结构体指针都可以赋值给接口变量,Go语言中有对指针类型变量求值的语法糖
type Mover interface {
	move()
}
type dog struct {}
func (d dog) move() {
	fmt.Println("狗会动")
}
func main() {
	var x Mover
	var wangcai = dog{} // 旺财是dog类型
	x = wangcai         // x可以接收dog类型
	var fugui = &dog{}  // 富贵是*dog类型
	x = fugui           // x可以接收*dog类型
	x.move()
}
  • 当指针接受者实现接口时:只能将结构体指针赋值给接口变量
type Mover interface {
	move()
}
type dog struct {}
func (d *dog) move() {
	fmt.Println("狗会动")
}
func main() {
	var x Mover
	var wangcai = dog{} // 旺财是dog类型
	x = wangcai         // x不可以接收dog类型
	var fugui = &dog{}  // 富贵是*dog类型
	x = fugui           // x可以接收*dog类型
}
  • v,ok:=x.(T):断言函数(同时实现类型转换),判断接口x是否为T类型的实例

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存