Go语言快速入门笔记(3)--函数,指针,srtuct结构体,interface接口,Error错误,panic恐慌和recover恢复

1,172 阅读3分钟

函数func(形参列表)[(返回值)]


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恢复