go语言的主要特性
- 1.自动垃圾回收
- 2.更丰富的内置类型
- 3.函数多返回值
- 4.错误处理
- 5.匿名函数和闭包
- 6.类型和接口
- 7.并发编程
- 8.反射
- 9.语言交互性
go语言四种声明方式
- 1.var 声明变量
- 2.const 声明常量
- 3.type 声明类型
- 4.func 声明函数
数据类型--值类型
- 值类型
- int(32 or 64 ),int8,int16,int32,int64
- uint(32 or 64 ),uint8,uint16,uint32,uint64
- float32,float64
- string
- complex64 complex128
- array (固定长度的数组)
数据类型--引用类型(指针类型)
- slice--序列数组(最常用)
- map --映射
- chan --管道
内置函数--不需要导入即可直接使用
- append -用来追加元素到数组,slice中,返回修改后的数组,slice
- close -主要用来关闭channel
- delete -从map中删除key对应的value
- panic -停止常规的goroutine(panic和recover用来做错误处理)
- recover-允许程序定义goroutine的panic动作
- real -返回complex的实例 (complex,real,imag用于创建和操作复数)
- imag -返回complex的虚部
- make -用来分配内存,返回type本身(智能用于slice,map,channel)
- new -用来分配内存,主要用来分配值类型,比如int,struct,返回执行type的指针
- cap -capacity是容器的意思,用来返回某个容器的最大容量(只用于切片和map)
- copy -用于赋值和连接slice 返回赋值的数目
- len -来求长度,比如string,array,slice,map,channel,返回长度
- print,println -底层打印函数在部署环境中建议使用fmt 包
内置接口
type error interface {//只要实现了Error()函数,返回值为string的都实现了err接口 Error() String }
基本数据类型
go有更明确的数字类型命名,支持unicode,支持常用数据结构
- 类型---长度(字节)---默认值---说明
- bool---1---false
- byte---1---0
- rune---4---0
- int,uint---4|8---0
- int8,uint8---1---0
- int16,uint16---2---0
- init32,uinit32---4---0
- init64,uinit64---8---0
- float32---4---0.0
- float64---8---0.0
- complex64---8------
- complex128---16------
- uintptr---4|8------
- array---------值类型
- struct--------值类型
- syting--------""UTF-8 字符串
- slice---------nil引用类型
- map-----------nil引用类型
- channel---------nil引用类型
- interface---------nil接口
- function----------nil函数
注意:
布尔类型变量的默认值为false。
Go 语言中不允许将整型强制转换为布尔型.
布尔型无法参与数值运算,也无法与其他类型进行转换。
字符串常用操作
- len()-------------------------------------求长度
- +|fmt.Sprintf-----------------------------拼接字符串
- string.Split------------------------------分割字符串
- string.Contains---------------------------判断是否包含
- string.HasPrefix,string.HasSuffix---------前缀判断|后缀判断
- strings.Index()|strings.LastIndex()-------子字符串出闲的位置
- strings.Join()----------------------------join操作
golang中没有隐式类型转换
数组-go语言的数组和其他语言有很大不同
- 1.数组式同一类型数据的固定长度序列
- 2.数组定义:var a[len]int,数组的长度必须是常量,一旦定义不可改变
- 3.长度是数组类型的一部分,因此var a [5]int 和var a[10]int是不同的类型
- 4.数组可以通过下标进行访问,最后一个元素的下标是len-1
- 5.访问越界,如果下表在数组长度之外,则触发越界,会panic
- 6.数组是值类型,赋值和传参会复制整个数组,因此改变副本的值不会改变本身的值
- 7.支持"=="和"!="操作,因为内存总是被初始化过去的
- 8.指针数组[n]T,数组指针[n]T