函数
- 函数的定义与使用
参数,返回值,多个返回值
- 不定长变参
func Add(a int, args ...int) (result int)
不定长参数只能放在最后,使用时,可以当成一个切片
- 传递值类型和引用类型
go语言中的引用类型有:切片、字典(map)、接口、函数类型 以及 通道(chan)
- 匿名函数与闭包
- defer 用法
- panic 与 recover
panic后面的代码不会执行,recover一般写在defer中。
当出现panic时,会开始执行其之前的defer,执行完毕后程序会退出。在panic之后的defer不会执行。
方法
和普通函数相比,方法默认的第一个参数是类型本身。当方法是类型的指针的方法时,可以使用类型或者类型指针去调用。但是如果方法是类型的方法,那么只能用类型去调用。
type Person struct { name string age int } func (p *Person) addAge(num int) { fmt.Println(p.age) p.age += num } 调用: var p Person = Person{} p.addAge(10) fmt.Println(p.age)由于方法的第一个参数是类型本身,所以也可以这样调用:
(*Person).addAge(&p, 20)
接口
接口的定义与基本操作
嵌入接口
类型断言
空接口与 type switch
嵌入接口
类型断言
空接口与 type switch
package main import ( "fmt" ) type Usb interface { Aprint(str string) } type Usb1 struct { name string } func (c Usb1) Aprint(str string) { fmt.Println(c.name) } func main() { var d Usb = Usb1{"usb1"} //--- if u1, ok := d.(Usb1); ok { fmt.Println(u1.name) } //---- switch v := d.(type) { case Usb1: fmt.Println(v.name) default: fmt.Println("unkonw type") } }
接口转换
接口使用注意事项