Go语言设计实现在任务栏里提醒你喝水的兔子

 更新时间:2023年01月10日 11:51:24   作者:六号积极分子  
这篇文章主要为大家介绍了Go语言设计实现在任务栏里提醒你喝水的兔子示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

之前看到 RunCat 一只可以在电脑上奔跑猫,其主要的功能是监控电脑的CPU、内存的使用情况,使用越多跑的越快。所以准备做一只在任务栏里的兔子,主要使用 Go 语言实现一个简单的到点拜年的兔子。

详细设计

基本需求:

  • 打开应用时可以在任务栏里显示
  • 实现动态兔子生成

实现一只在任务栏里的兔子。基本就是一个应用的图标,并且图标是动态变化的。使用 Go 开发的话可以使用 systray 工具包,能够支持在任务栏里显示图标。

 go get github.com/getlantern/systray

需要使用 goV1.12版本以上。安装完后就可以在 main 文件中加入方法

func main() {
	systray.Run(onReady, onExit)
}
func onReady() {
	systray.SetIcon(icon.Data) // 
	systray.SetTitle("HappyRabbit")
	systray.SetTooltip("Happy New Year")
	mQuit := systray.AddMenuItem("Quit", "退出应用")
	mTip1 := systray.AddMenuItem("change", "图标更新")
    	go func() {
		for {
			select {
			case <-mQuit.ClickedCh:
				systray.Quit()
				return
			case <-mTip1.ClickedCh:
				var data [][]byte
                picData := getIcon()
			    systray.SetIcon(picData)
			}
		}
	}()
}

以上代码就是打开应用时先使用默认的图标,点击图标更新时就可以实现图标的变更。主要使用了设置图标的方法是 systray.SetIcon([]byte)

需要注意,如果不是使用 ico 格式的图标可能会发生以下的错误:

ERROR systray: systray_windows.go:845 Unable to set icon: The volume for a file has been externally altered so that the opened file is no longer valid. 

完成图标更新的需求后就可以进一步实现动态图标变更,从而实现一只能动的拜年兔子。实现动态化基本思路就是多张动作图片不断地循环从而实现动态。简单的实现就是可以将多个图片都加载进来,然后使用循环:

var data [][]byte
data1, _ := getIcon("./images/1.ico")
data2, _ := getIcon("./images/4.ico")
data3, _ := getIcon("./images/5.ico")
data = append(data, data1)
data = append(data, data2)
data = append(data, data3)
go func() { // 异步处理
    index := 0
    for {
        systray.SetIcon(data[index])
        time.Sleep(time.Second * 2)
        index++
        if index == 2 {
            index = 0
        }
    }
}()

以上更好的方式,我觉得可以使用 corn 定时任务去执行,这样就可以对定时任务进行控制,想开就开,想关就关。

基本实现到这里就是完成了一个简单的任务栏显示功能,但我在里面增加一个可以定时通过 webhook 方式给自己的飞书通知消息,提醒该喝水了。

详细飞书 webhook 的方式可以参考自己写过的文章:https://www.jb51.net/article/272249.htm

安装包

开发完之后就可以进行编译。不同的平台编译生成安装包还是不一样的。但在编译的时候还需要注意不同环境的区别:

首先需要打开环境配置:

env GO111MODULE=on go build

Window

go build -ldflags -H=windowsgui

MacOS

在macOS,需要先创建一个应用程序二进制包包装;基本的文件配置是

SystrayApp.app/
  Contents/
    Info.plist
    MacOS/
      go-executable
    Resources/
      SystrayApp.icns

这里主要实现了在任务栏兔子生成的效果,可以继续迭代升级,比如监控系统的状态、或者进行一些异步的工作,通知事件或者其他的功能。因为我不擅长做UI所以就没有实现更加壮观的结果。以上就是我实现的整个过程,有任何问题欢迎指正。

效果展示

以上就是Go语言设计实现在任务栏里提醒你喝水的兔子的详细内容,更多关于Go语言设计任务栏提醒喝水的资料请关注脚本之家其它相关文章!

相关文章

  • Go语言实现字符串切片赋值的方法小结

    Go语言实现字符串切片赋值的方法小结

    这篇文章主要给大家介绍了Go语言实现字符串切片赋值的两种方法,分别是在for循环的range中以及在函数的参数传递中实现,有需要的朋友们可以根据自己的需要选择使用。下面来一起看看吧。
    2016-10-10
  • go嵌套匿名结构体的初始化详解

    go嵌套匿名结构体的初始化详解

    这篇文章主要介绍了go嵌套匿名结构体的初始化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang操作excel的方法

    Golang操作excel的方法

    这篇文章主要介绍了Golang操作excel的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Go语言中的上下文取消操作详解

    Go语言中的上下文取消操作详解

    这篇文章主要给大家介绍了关于Go语言中上下文取消操作的相关资料,本文将解释我们如何利用上下文库的取消特性,并通过一些模式和最佳实践来使用取消,使你的程序更快、更健壮。需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07
  • Golang语言如何读取http.Request中body的内容

    Golang语言如何读取http.Request中body的内容

    这篇文章主要介绍了Golang语言如何读取http.Request中body的内容问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • go原生库的中bytes.Buffer用法

    go原生库的中bytes.Buffer用法

    这篇文章主要介绍了go原生库的中bytes.Buffer用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 使用Go语言实现找出两个大文件中相同的记录

    使用Go语言实现找出两个大文件中相同的记录

    这篇文章主要为大家详细介绍了使用Go语言实现找出两个大文件中相同的记录的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • Go语言获取文件的名称、前缀、后缀

    Go语言获取文件的名称、前缀、后缀

    这篇文章主要介绍了Go语言获取文件的名称、前缀、后缀,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go语言开发前后端不分离项目详解

    Go语言开发前后端不分离项目详解

    这篇文章主要为大家介绍了Go语言开发前后端不分离项目详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Go语言到底有没有引用传参(对比 C++ )

    Go语言到底有没有引用传参(对比 C++ )

    这篇文章主要介绍了Go 到底有没有引用传参(对比 C++ ),需要的朋友可以参考下
    2017-09-09

最新评论