记录一些golang有关的知识点,主要是一些golang特有的
1.声明变量
var 变量名称 类型
命名规则
不能以数字开头
区分大小写
驼峰规则
变量声明后没有初始化的话 值为空
2.初始化变量
第一种初始化变量
var username string
username="zz"
第二种
var username string = "zz"
第三种
var username ="zz"
3.一次声明多个变量
var 变量名称 变量名称 类型
var (
变量名称 类型
变量名称 类型
)
4.短变量声明
只能局部变量 不能全局变量声明
类型不一致没关系
username := "zz"
a,b := 20, 30
5.匿名变量
不占空间 不存在重复声明
const pi=3.14159
const iota(计数器)
const a=iota //a=0
const{
b=iota
c
d//-(跳过一个值)
e
}
0,1,2,3/0,1,3
***声明中插队***
const{
b=iota//0
c=100//100
d=iota//2
e//3
}
***多个定义在一行***
const{
a,b=iota+1,iota+2 //1,2
c,d //2,3
e,f //3,4
}
print 不换行 不空格
println 换行 空格
printf 格式化输出 ("%v",a)
var a int =10
fmt.println("a=",a)
fmt.printf("a=%v\n",a)
fmt.printf("a=%v" a的类型是%T",a,a)
整型分为 有符号整型 无符号整型
与其他语言一致
有float32/64
默认使用float64 保留6位
会出现精度缺失的现象
科学计数法
var f2=3.14e2 //3.14*10^2
多行字符串
示例
主要操作
len 求长度
fmt.Sprintf 拼接字符串/+
fmt.Sprintf("%v %v",str1,str2)
strings.Split 分割 strings 需要引入strings包
strings.Split(str1,"-") 切片
strings.Join(str1,"-") 把切片连接成字符串
strings.contains 判断是否包含
strings.HasPrefix /HasSuffx 前后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置 前/后
布尔型
整型不能转换为布尔类型
布尔类型无法参与数值运算
var s="sssss"
if s {
fmt.printf("true")
}//报错
示例
是引用类型 包括地址、长度、容量;默认值为nil
声明
var arr1 []int //不推荐
初始化
var arr2 = []int{1,2,3,4}
var arr3 = []int{1: 2,2: 4,3: 6}//前一个表示位置,后一个表示值
a :=[数组个数]int{}
b :=a[:] //获取数组里面所有的值
a :=[]string{}
b :=a[1:]
示例
切片的长度是就是它包含的元素个数
切片的容量就是从它的第一个元素开始数,到其底层数组元素末尾的个数
分别可以用len(),cap()获取
var 切片名 = make([]类型,长度,容量)
append (切片名,扩容量)
切片名 = append(切片名,切片名1...)//必须要有...
copy(切片名1,切片名2) //切片名2复制到1中
golang中没有删除切片元素的专用方法,可以通过再切片和合并的方法实现
1.对于int,float64和string数组或是切片的排序,
有sort.Ints(),sort.Float64s()和sort.strings()函数
默认从小到大排序
map是一种无序的基于key-value的数据结构,map是引用数据类型,必须初始化
map[KeyType]ValueType //KeyType表示键的类型,ValueType表示键对应的值的leixing
map类型的变量默认初始值为nil,需要使用make()函数来分配内存
var map类名 = make(mapKeyType]ValueType)
func 函数名(参数 (变量名,类型))(返回值){} 类型一样可省略前面的
这里用到的是type定义一个函数类型
type 函数类型名(int,int)int
func (参数)(返回值){
函数体
}
1.闭包是指有权访问另一个函数作用域中的变量的函数
2.创建闭包的常见的方式是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量
写法: 函数里嵌套函数,最后返回里面的函数
func adder()
defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序执行。
go语言中目前没有异常机制,使用panic和recover模式处理错误
注意panic在任何地方都可生效,但recover只能在defer中有效
type 类型名 struct{
字段名 字段类型
字段名 字段类型
...
}
结构体是值类型
func(接受者变量 接受者类型)方法名(参数列表)(返回参数){
函数体
}
//接受者变量 命名时第一个字母小写
type 接口名 interface{
方法名1(参数列表1)返回值列表1
方法名2(参数列表2)返回值列表2
}
不定义任何方法的接口,可以接受任何类型的接口
空接口也可以直接当做类型使用
判断空接口中的类型
x.(T)
如果结构体中的方法是值接受者,那么实例化后的结构体值类型和结构体指针类型都可以赋值给接口变量
如果结构体中的方法是指针接受者,那么实例化后的结构体指针类型可以赋值给接口变量,结构体值类型不能赋值给接口变量
主要通过多协程实现