Go 如何讓函式只能被呼叫一次
阿新 • • 發佈:2018-12-16
某些時候我們會有讓函式只能被呼叫一次的需求
- 完成這個功能可以使用
Go
的sync.Once
方法
package main
import (
"fmt"
"sync"
)
type SayHello struct {
once sync.Once
}
func (sayHello *SayHello) print() {
sayHello.once.Do(func() {
fmt.Println("hello")
})
}
func main() {
var a SayHello
a.print()
a.print()
a.print()
a.print ()
a.print()
a.print()
}
輸出:
hello
- 當然也可以自己使用
鎖
和 標誌位flag
或count
計數器完成這個功能
package main
import (
"fmt"
"sync"
)
type SayHello struct {
mutex sync.Mutex
isUsed bool
}
func (once *SayHello) Print() {
once.mutex.Lock()
if !once.isUsed {
fmt.Println("hello")
once.isUsed = true
}
once. mutex.Unlock()
}
func main() {
a := SayHello{}
a.Print()
a.Print()
a.Print()
a.Print()
a.Print()
a.Print()
}
輸出:
hello