栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

在Go中调用另一个包中的函数-time回调

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Go中调用另一个包中的函数-time回调

写一个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--%drn", 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 exitrn")
			exitSystem = true
			break
		}
		if ch == 'd' { //for debug
			log.Printf("get Disconnect from keyboardrn")
			getDisconnFromKeyboard = true
		}
		if ch == 'n' { // for debug use
			log.Printf("get NACK from keyboardrn")
			getNACKfromKeyboard = true
		}
		if ch == 't' {
			log.Printf("get Timeout set from keyboardrn")
			getTimeoutFromKeyboard = true
		}
		if ch == 'a' {
			log.Printf("get No ACK from keyboardrn")
			getNoACKFromKeyboard = true
		}
		if ch == 'l' {
			log.Printf("get Loss ACK from keyboardrn")
			getLossACKFromKeyboard = true
		}
		if ch == 'm' {
			log.Printf("get More ACK from keyboardrn")
			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--%drn", count, scan_wdg_triggered)
		if count == 5 {
			scan_wdg.Feed()
		}
        
        if exitSystem {
			return
		}
	}

}

 

运行效果是 键盘按下 d n 什么的可以看LOG

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905792.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号