- 方法
方法实际上也是函数,只是在声明时,关键字func喝方法名之间增加了一个参数(接收者)1
2
3
4
5
6
7
8
9
10type user struct {
name string
email string
}
func (u user) notify() {
fmt.Printf("Sending User Email To %s<%s>\n",u.name,u.email)
}
func (u *user) changeEmail(email string) {
u.email = email
} - defer 关键字
在函数或方法中,用defer标识的语句将会在函数或方法返回后执行1
2
3
4
5
6
7
8
9func (p *Pool) Release(r io.Closer) {
p.m.Lock()
defer p.m.Unlock()
if p.closed {
r.Close()
return
}
} - chan 通道
1
2
3
4
5
6
7type Test struct {
// 普通通道.
complete chan error
// 单项通道,只能读取.
timeout <-chan time.Time
} - select 语句
select 中没有default分支,程序将会阻塞等待select 中有default分支,程序将会将阻塞转变为非阻塞,如果通道有内容则接收,没有则执行default分支1
2
3
4
5
6
7select {
case err := <-r.complete:
return err
case <-r.timeout:
return ErrTimeout
}1
2
3
4
5
6
7
8select {
case <-r.interrupt:
signal.Stop(r.interrupt)
return true
default:
return false
}