类型
- 变量
var 变量名 类型 = 初始化 //其中类型可以省略
- 常量
const pi int = 3
const (
a = 0
b = 1
c = 2
)
const (
a = iota
b
c
)
// a 为0 b为1 后面自动加一
类型
值类型
- int int8 int16 int 32 int64 uint …
- bool
- byte
- string
- float
- struct
引用类型
- 指针
a = 5
&a // 现在为a的地址
func add(a *int){
*a = 10
}
a = 5
add(&a) //这时候全局的a值为10
- slice
- map
声明:var a map[type]value
判断key是否存在var a map[string]string a = make(make[string]string,len) //len可写可不写 a['123] = 'asdf'
a := map[string][sting]{"name":"123"} b, c := a["name"]
// b是值,c是布尔值,如果key name存在为true, 不存在为false
遍历
for v, k := range a{
v//是key
k//是value
}
删除
delete(a,key)
长度
len(a)
- chan
字符串方法
strings包
- strings.HasPrefix(s string , pre string) //判断s是否以pre开头的
- strings.HasSuffix(s string , pre string) //判断s是否以pre结尾的
- Index(s string, a string) //判断s中a字符串首次出现的位置
- LastIndex //最后出现的位置
- Replace(s string , old,new) //替换
- Count(s,a) //a在s中出现的次数
- Repeat (s ,a)// 在s中出现a次的字符
- trimspace(s) //去掉s中收尾的空格
- trim(s,‘-’)//去点s中首尾‘-’
- fields(s)//将s以空格分隔成数组
- split(s,a)//将s以a分隔成数组
- join(s,a)//将数组s以a连接为字符串
函数
func add(a int, b int) (int) {
c = a + b
return c
}
不定参数
func add(a int,b ...int){ //此时b就是一个不定长参数,函数里面以数组形式接受
}
defer
类似上下文,函数执行完,最后会执行defer 后面的语句
内置函数
- close //关闭channel
- len //求长度
- new //用来分配内存 返回是一个指针
- make // 用来分配内存,返回的是数值。
- append //用来添加元素
- panic,recover //错误处理
func test() {
defer func(){
if err:=recover();err != nil {
fmt.println(err)
}
a:=10
b:=0
c:=a/b
}
}
func main(){
test()
fmt.println(11111111) //程序错了,捕获到,但是不会崩溃
}
数组
同一种类型固定长度的序列
var lis [len]int
var lis [6]int
var lis [...]int{1,2,3,4,5,6}
数组是值类型
切片
切片是可变的数组。是引用类型
- cap 可以判断切片的容量
排序
sort包
sync//锁包
var lock sync.Mutex //互斥锁
lock.Lock()//加锁
lock.unlock()//释放锁
var wrlock sync.rwlock
wrlock.rlock()
wrlock.runlock()
结构体 //类似于别的语言的类。
struct 结构体是值类型的
type Student struct{
name string
age int
}
方法:
func (p student) add(a string b int){ //p 实际就是结构体的实例化对象
}
匿名字段
type people struct{
name string
age int
}
type student struct{
people
}
//这里就类似于类的继承。
s : = student{}
s.name
s.age //可以访问到people中的字段
s.people.name
s.people.age //也可以
反射 (获取类型)
reflect 包
reflect.TypeOf() 获取类型、可以获得到时哪个类的属性
reflect.ValueOf() 获取值
reflect.Vlue.Kind //获取类型
reflect.Value.Interface //转换成interface类型
操作结构体:
reflect.Value.NumFiled //获取属性
reflect.Value.Methods.Call //获取方法