参考:
1. 《Go语言实战》
2. 《Goweb编程》
3. 《Go Programming Language》
1. golang中的三个点 '...' 的用法
它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。
第二个用法是slice可以被打散进行传递。
func test1(args ...string) { //可以接受任意个string参数
for _, v:= range args{
fmt.Println(v)
}
}
func main(){
var strss= []string{
"qwr",
"234",
"yui",
"cvbc",
}
test1(strss...) //切片被打散传入
}
2. interface
package main
import (
"fmt"
)
type Phone interface {
call()
}
type NokiaPhone struct {
}
func (nokiaPhone NokiaPhone) call() {
fmt.Println("I am Nokia, I can call you!")
}
type IPhone struct {
}
func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!")
}
func main() {
var phone Phone
phone = new(NokiaPhone)
phone.call()
phone = new(IPhone)
phone.call()
}
3. channel
ch := make(chan int) //创建channel
ch <- 1 //write
i:= <-ch //get
4. Golang中引用类型:
数组切片:指向数组(array)的一个区间。
map:极其常见的数据结构,提供键值查询能力。
channel:执行体(goroutine)间的通信设施。
接口(interface):对一组满足某个契约的类型的抽象。
5. Defer
https://studygolang.com/articles/5932
6. 类型转换和断言
类型转换:
(1)、语法:<结果类型> := <目标类型> ( <表达式> )
(2)、类型转换是用来在不同但相互兼容的类型之间的相互转换的方式
类型断言
(1)语法:
<目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言
<目标类型的值> := <表达式>.( 目标类型 ) //非安全类型断言
(2)类型断言的本质,跟类型转换类似,都是类型之间进行转换,不同之处在于,类型断言实在接口之间进行,相当于Java中,对于一个对象,把一种接口的引用转换成另一种。
我们先来看一个最简单的错误的类型断言:
func test6() {
var i interface{} = "kk"
j := i.(int)
fmt.Printf("%T->%d\n", j, j)
}
现在把这个 i 转换成 int 类型,系统内部检测到这种不匹配,就会调用内置的panic()函数,抛出一个异常。