func 函数名(形参列表) [返回值/(返回值列表)]{
...
[return 返回值,返回值...]
}
1.形参:
标准形参:变量名 变量类型, eg. num int
可变参数:参数名称 ... 参数类型
*传入的可变参数本质上是切片
*可变参数只能放在形参列表末尾
2.返回值:
*返回值列表可以写多个返回值,但需要加圆括号,例:(int,string,...)
*返回值列表元素:[返回值变量名] 返回值类型
*若注明返回值变量名则直接使用return,否则需要手动写return列表
3.匿名函数:
func (形参列表)[返回值]{
...
[return 返回值]
}(实参列表)
4.函数可以赋值给变量--函数是一等对象
*函数可以作为参数传入
*函数可以作为返回值返回
5.defer修饰符
defer fun() //在调用方法前加上defer
作用:fun函数和实参将压栈并在本代码块返回前的最后时刻逐个弹出执行
指针&*
同C语言
注意:这里的指针类型请声明为`*datatype`
类/结构体struct
//定义:
type 类名 struct{
属性名 属性类型
}
//方法
func (类变量名 *类名) 方法名(形参列表) [(返回值列表)]{
//函数体
}
//实例化:
var 变量名 类名
变量名 := 类名{k:v, ...}/{v1, v2, ...}
new(类名) //注意new方法创建的是对象的指针
//属性访问:
变量名.成员名
//匿名结构体
struct{
属性名 属性类型
}{实属性列表}
//匿名字段
属性声明中,没有属性名只有属性类型,属性名为类型名
1.类名首字母大写表公有类型,小写表私有类型
2.type等价于C语言中的typedef
3.继承:
实现:将父类结构体作为匿名字段写入子类属性,即提升字段
注意点:go语言的继承没有重载只有覆盖
接口interface
//定义
type 接口名称 interface{
方法名(形参列表)[()]
...
}
//接口实现
实现类直接写接口内所有方法实现即可
1.接口类型可以作为参数传入函数,实参为接口的实现类
2.空接口可以理解为java中的元类Object
错误Error
//创建
errors.New(错误信息) //返回错误的指针
//获取错误信息
err.Error()
*注意错误Error只是普通结构体,不会造成程序中断,而panic恐慌会使程序终端
恐慌panic和恢复recover
//恐慌抛出(抛出异常)
panic(恐慌原因)
//恐慌恢复(异常处理)
defer func(){
//异常处理代码
recover()
}()
*注意recover异常处理匿名函数必须在panic之前被defer
*注意go语言建议尽量少使用panic恐慌而用多值返回error来代替
Go语言快速入门笔记系列传送门
Go语言快速入门笔记(1)–变量var,分支if else,循环for,fmt简单输入输出
Go语言快速入门笔记(2)–值类型和引用类型,silce切片,map映射
Go语言快速入门笔记(3)–函数,指针,srtuct结构体,interface接口,Error错误,panic恐慌和recover恢复
Go语言快速入门笔记(4)–协程并发go关键字,通道chan,select语句
Go语言快速入门笔记(5)–PV原语简介,sync包实现互斥与同步