写一个A.go文件 别的B.go文件 调用A.go的函数
注意:函数必须首字母大写 大写表示public
A.go如下
package watchdog
import (
"time"
)
type Watchdog struct {
interval time.Duration
timer *time.Timer
}
func New(interval time.Duration, callback func()) *Watchdog {
w := Watchdog{
interval: interval,
timer: time.AfterFunc(interval, callback),
}
return &w
}
func (w *Watchdog) Stop() {
w.timer.Stop()
}
func (w *Watchdog) Reset() {
w.timer.Reset(w.interval)
}
func (w *Watchdog) Feed() {
w.timer.Stop()
w.timer.Reset(w.interval)
}
它主要的任务是 创建一个回调 就是过多少时间以后做一个什么事情!
package main
import (
"log"
"time"
"test/watchdog"
)
func main() {
scan_wdg_triggered := false
count := 0
scan_wdg := watchdog.New(time.Second*10, func() { scan_wdg_triggered = true })
for {
time.Sleep(time.Second)
count = count + 1
log.Printf("count %d--%d\r\n", count, scan_wdg_triggered)
if count == 5 {
scan_wdg.Feed()
}
}
}
调用 需要使用的是 mod
需要的是
把A.go文件放在文件夹里面!名字无所谓 因为是根据 "test/watchdog"
流程:
go mod init test
就出来了
go mod tidy 它是去下载文件的 出来的go sum 不要理会
-------我们的-----
module test
go 1.17
-------我们的-----
我们要自己文件 本地修改 就替换一下
自己修改文件了
module mcubemems.com/m_izar_rpi_gw
go 1.16
require (
github.com/fsnotify/fsnotify v1.5.1
github.com/gorilla/websocket v1.4.2
github.com/spf13/viper v1.9.0
tinygo.org/x/bluetooth v0.3.0
)
replace tinygo.org/x/bluetooth v0.3.0 => ./bluetooth_mcube
解释一下代码 时间到了回调函数 本质是
https://pkg.go.dev/time#AfterFunc
我们大可不必写的这么复杂!!!!
go自己完成的 时间到了 去干啥 但是官方说了 还是好些
继续 前面是一个main+一个文件夹
如果和main.go平级的文件夹有其他。go呢?
我们是这样的 它的名字可以是B.go 但是内部是package main
package main
import (
"log"
"tinygo.org/x/bluetooth/rawterm"
)
var getNACKfromKeyboard bool = false
var getDisconnFromKeyboard bool = false
var getTimeoutFromKeyboard bool = false
var getNoACKFromKeyboard bool = false
var getLossACKFromKeyboard bool = false
var getMoreACKFromKeyboard bool = false
var exitSystem bool = false
func keyboardDebugging() {
rawterm.Configure()
defer rawterm.Restore()
for {
ch := rawterm.Getchar()
if ch == '\x18' {
log.Printf("get Ctrl-X, system exit\r\n")
exitSystem = true
break
}
if ch == 'd' { //for debug
log.Printf("get Disconnect from keyboard\r\n")
getDisconnFromKeyboard = true
}
if ch == 'n' { // for debug use
log.Printf("get NACK from keyboard\r\n")
getNACKfromKeyboard = true
}
if ch == 't' {
log.Printf("get Timeout set from keyboard\r\n")
getTimeoutFromKeyboard = true
}
if ch == 'a' {
log.Printf("get No ACK from keyboard\r\n")
getNoACKFromKeyboard = true
}
if ch == 'l' {
log.Printf("get Loss ACK from keyboard\r\n")
getLossACKFromKeyboard = true
}
if ch == 'm' {
log.Printf("get More ACK from keyboard\r\n")
getMoreACKFromKeyboard = true
}
}
}
这样我们在上面的main修改一下
直接run不可以 因为我们有依赖github
不可以直接run 因为main是分开的 需要2个go
package main
import (
"log"
"time"
"test/watchdog"
)
func main() {
scan_wdg_triggered := false
count := 0
scan_wdg := watchdog.New(time.Second*10, func() { scan_wdg_triggered = true })
go keyboardDebugging() // press keyboard to set some debug flags
for {
time.Sleep(time.Second)
count = count + 1
log.Printf("count %d--%d\r\n", count, scan_wdg_triggered)
if count == 5 {
scan_wdg.Feed()
}
if exitSystem {
return
}
}
}
运行效果是 键盘按下 d n 什么的可以看LOG
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)