栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

go语言数据类型

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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类型的实例
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号