🕵️‍♀️ SNI:解密网络世界的“指纹识别”

你是否曾好奇,在浩瀚的互联网海洋中,我们是如何识别目标网站的呢?答案就在于一个名为“SNI”的协议。它就像网络世界的“指纹识别”技术,为每个网站赋予了独一无二的标识,让服务器能够准确地辨别出我们想要访问的网站。 🔍 SNI:一场“指名道姓”的网络游戏 SNI,全称为“服务器名称指示”(Server Name Indication),是TLS协议中的一个扩展。它就像一场“指名道姓”的网络游戏,让客户端在连接服务器时,能够明确地告诉服务器自己想要访问哪个网站。 想象一下,你走进一家大型商场,里面有各种各样的店铺。如果你想找到一家特定的店铺,你必须告诉服务员你想要去哪家店,而不是直接走到一个随机的柜台。SNI就如同这个“指名道姓”的过程,它让客户端在连接服务器时,能够明确地告诉服务器自己想要访问哪个网站,而不是随机地连接到一个服务器上的任意服务。 🌐 SNI代理:网络世界的“翻译官” SNI代理就像网络世界的“翻译官”,它能够理解SNI协议中的信息,并将其翻译成服务器能够理解的指令。它就像一个“中间人”,帮助客户端和服务器之间建立连接,并确保数据能够安全可靠地传输。 SNI代理的工作原理很简单,它通过解析TLS握手信息中的SNI部分,从而获取目标访问地址。它就像一个“侦探”,能够从TLS握手信息中提取出目标网站的“指纹”,并将其传递给服务器。 🎭 SNI代理的“变脸术”:Host混淆 SNI代理还可以使用“Host混淆”技术,来隐藏目标网站的真实地址。它就像一个“魔术师”,能够将目标网站的“指纹”替换成一个假的“指纹”,从而欺骗服务器,让服务器以为连接的是一个不同的网站。 Host混淆技术通常用于保护用户隐私,防止网站运营商追踪用户的访问行为。它就像一个“隐形斗篷”,能够将用户隐藏在网络世界中,让用户能够安全地访问网站,而无需担心被追踪。 🔗 SNI代理的“组合拳”:数据通道 SNI代理本身是一个数据处理层,它可以与各种数据通道组合使用,以实现更强大的功能。 例如,SNI代理可以与TLS协议组合使用,形成“SNI Over TLS”数据通道。它就像一个“安全通道”,能够加密数据,防止数据被窃取。 SNI代理还可以与Websocket协议组合使用,形成“SNI Over Websocket”数据通道。它就像一个“实时通道”,能够实现实时通信,例如实时聊天、视频通话等。 🚀 SNI代理的“未来展望” SNI代理技术正在不断发展,未来将会更加强大和灵活。它将成为网络安全和隐私保护的重要工具,为用户提供更安全、更便捷的网络体验。 参考文献

🚀 WebTransport:让网络通信更轻更快!

WebTransport 就像是一场网络通信的革命,它以 HTTP/3 协议为基础,为我们打开了低延迟双向通信的大门。想象一下,未来的网页不再受限于传统的 TCP 连接,而是可以像 UDP 那样自由地发送数据,同时又拥有 HTTP/3 的可靠性。WebTransport 就如同网络世界的“高速公路”,让数据在客户端和服务器之间自由穿梭,为我们带来前所未有的体验。 🐢 WebTransport 的前世今生 WebTransport 的诞生并非偶然,它承袭了早期 QuicTransport 的理念,但更进一步,以 HTTP/3 协议为基础,打造了一个更加通用、更易于使用的网络通信 API。WebTransport 的核心在于它既支持数据报 API,也支持数据流 API,满足了不同应用场景的需求。 数据报 API 就像是网络世界的“快递小哥”,它可以快速地发送和接收数据,但并不保证数据传输的顺序和可靠性。这对于那些对延迟要求极高的应用场景,例如实时游戏、视频直播等,非常适用。 数据流 API 则像是网络世界的“物流公司”,它可以保证数据的可靠性、有序性,并支持多路数据流的传输。这对于那些需要可靠传输数据的应用场景,例如文件上传、下载等,非常适用。 💡 WebTransport 的应用场景 WebTransport 的应用场景非常广泛,它可以用于: 🤝 WebTransport 与其他技术的比较 WebTransport 的出现并非要取代现有的网络通信技术,而是提供了一种新的选择,为开发者提供了更多可能性。 💻 如何使用 WebTransport 使用 WebTransport 非常简单,只需要创建 WebTransport 实例并连接到服务器即可。WebTransport 提供了三种不同的流量类型:数据报、单向数据流和双向数据流。 连接到服务器: 使用数据报 API: 使用数据流 API: 🚧 … Read more

💬 让你的网站评论区,摇身一变成 GitHub Discussions!

你是否厌倦了传统网站评论系统的单调乏味? 想要一个更灵活、更强大、更具社区感的评论系统?别再犹豫,快来体验 giscus 吧!它利用了 GitHub Discussions 的强大功能,将你的网站评论区瞬间升级为一个充满活力的社区中心。 giscus 的核心思想简单明了: 将你的网站评论与 GitHub Discussions 关联起来,让访客在 GitHub 上直接参与讨论。这不仅能充分利用 GitHub 的强大功能,还能让你的网站评论区更具吸引力。 想象一下: 你的网站评论区不再是简单的留言板,而是变成了一个充满活力的 GitHub Discussions 页面。访客可以轻松地点赞、评论、关注讨论,甚至还可以使用 GitHub 的强大功能,例如代码块、图片、链接等,让讨论更加丰富多彩。 giscus 的魅力不止于此: 🚀 无缝集成: giscus 的安装和配置极其简单,只需添加几行代码,就能将它集成到你的网站中。 🌐 多语言支持: giscus 支持多种语言,让你可以轻松地为全球用户提供本地化的评论体验。 🎨 自定义主题: giscus 提供多种主题,让你可以根据网站风格轻松定制评论区的视觉效果。 🛡️ 安全可靠: giscus 采用 GitHub 的安全机制,确保你的评论区安全可靠。 💡 灵活配置: giscus 提供多种配置选项,让你可以根据自己的需求定制评论区的功能和外观。 那么,giscus 究竟是如何运作的呢? 它就像一个神奇的桥梁,连接着你的网站和 GitHub Discussions。 当访客访问你的网站时,giscus 会使用 … Read more

🚀 Kivy: 跨平台应用开发的魔法棒

在这个日新月异的数字时代,应用开发已经成为了一门炙手可热的技能。但是,面对iOS、Android、Windows、macOS等林林总总的平台,开发者们常常会感到无从下手。如果有一根魔法棒,能够让你一次编写,到处运行,那该有多好?今天,就让我来为你介绍这样一根魔法棒 —— Kivy框架。 🌈 Kivy:一次编写,处处运行 Kivy是一个开源的Python库,用于开发跨平台的应用程序。它就像是一个神奇的调色板,让你可以用Python这支画笔,在不同的平台画布上绘制出色彩斑斓的应用程序。 想象一下,你正在画一幅美丽的风景画。使用Kivy,你只需要画一次,这幅画就可以同时挂在客厅(桌面电脑)、卧室(平板电脑)、甚至是随身携带(智能手机)。是不是很神奇? Kivy支持的平台包括: 🎨 Kivy的魔力:NUI和图形引擎 Kivy的核心魔力来自于其自然用户界面(NUI)工具包和强大的图形引擎。就像魔法师挥舞魔杖一样,Kivy让你能够轻松创建出富有视觉吸引力和交互性的应用界面。 想象一下,你正在设计一个互动游戏。使用Kivy,你可以轻松实现各种炫酷的效果: 🧙‍♂️ Kivy语言:你的专属咒语书 Kivy不仅提供了强大的Python API,还创造了一种特殊的”咒语”—— Kivy语言。这种声明式语言就像是一本魔法书,让你能够用简洁优雅的方式描述用户界面。 例如,创建一个按钮就像念一个简单的咒语: 这个”咒语”会召唤出一个写着”Hello World”的按钮,当你点击它时,就会在控制台打印出”Button pressed!”。是不是很神奇? 🎓 学习Kivy:从学徒到魔法师 成为一名Kivy魔法师并不难,你只需要掌握一些基本的Python知识。如果你还不熟悉Python,不用担心,这里有一些excellent的学习资源: 一旦你掌握了基本的Python技能,就可以开始你的Kivy魔法之旅了。本教程将带领你: 每个章节都会介绍一个新主题,给你足够的信息开始实践,并提供深入学习的链接。当你完成这个教程后,你就能独立开发Kivy应用了,并且知道在遇到困难时该去哪里寻找答案。 🚀 开始你的魔法之旅 好了,理论知识已经足够了,让我们开始动手实践吧!首先,我们需要安装Kivy这根魔法棒。 安装Kivy最简单的方法就是使用pip。就像施展一个简单的咒语: 这个咒语会从PyPI(Python包索引)中召唤出Kivy及其基本依赖,以及一些示例程序。 如果你想要更多魔法效果(比如音频和视频支持),可以使用这个增强版咒语: 安装完成后,你可以通过运行一个简单的示例来测试是否安装成功: 如果一切顺利,你应该能看到一个漂亮的演示程序,展示了Kivy的各种魔法效果。 🎉 结语 恭喜你!你已经成功安装了Kivy这根强大的魔法棒,并且对它有了初步的了解。接下来,你将开始一段激动人心的旅程,学习如何用Kivy创造出令人惊叹的跨平台应用。 记住,每个伟大的魔法师都是从学徒开始的。保持好奇心,不断实践,你终将成为Kivy的大师级魔法师! 让我们一起期待你用Kivy创造出的第一个魔法作品吧! 参考文献

🌟 当AI遇上艺术,Diffusion-RWKV模型来袭!

在人工智能的浩瀚星空中,Transformer模型犹如一颗璀璨的北极星,照亮了计算机视觉和自然语言处理的前进道路。然而,就像每一个超级英雄都有自己的弱点一样,Transformer也面临着一个不小的挑战:当任务涉及长序列处理时,它的计算复杂度会呈现二次方增长,就像是超人遇到了氪石。这个问题在高分辨率图像生成等任务中尤为突出,仿佛是给超人套上了一件沉重的铠甲,让他举步维艰。 但是,别担心!科技的进步从不停歇。今天,让我们一起来认识一位新晋的AI明星:Diffusion-RWKV。它就像是Transformer的改良版,不仅继承了前辈的优秀基因,还进行了一系列的”基因编辑”,使其更适合于图像生成的特殊需求。 🎨 Diffusion-RWKV:AI艺术家的神奇画笔 想象一下,如果让AI来画一幅画,会是什么样的场景?传统的方法可能就像是用一支笔从左到右,从上到下一点点地填充画布。而Diffusion-RWKV则更像是一位天才画家,他先在脑海中构思整体布局,然后用魔法般的笔触,让整幅画作同时在各个区域逐步显现出来。 Diffusion-RWKV的核心魔法来自于它的双向RWKV块(Bi-directional RWKV block)。这个结构就像是画家的左右手,可以同时在画布的不同位置作画,既能关注局部细节,又能把控整体风格。这种双向处理的能力,让Diffusion-RWKV在处理高分辨率图像时如鱼得水,不需要像其他模型那样把画布分割成小块逐一处理。 🔍 深入解析:Diffusion-RWKV的秘密武器 🚀 性能分析:Diffusion-RWKV的超能力 在实验中,Diffusion-RWKV展现出了令人瞩目的表现。无论是在无条件图像生成还是类别条件图像生成任务中,它都能与现有的CNN或Transformer基础的扩散模型相媲美,甚至在某些方面更胜一筹。 特别值得一提的是,Diffusion-RWKV在处理高分辨率图像时表现出色。当图像分辨率从256×256提升到512×512时,Diffusion-RWKV的优势更加明显。它不仅能保持图像质量,还能显著减少计算量,这就像是一位能在巨幅画布上创作精细画作,却不需要耗费太多时间和精力的超级画家。 🎭 案例研究:Diffusion-RWKV的艺术展 让我们来欣赏一下Diffusion-RWKV的”作品”。在ImageNet数据集上训练的模型能够生成各种逼真的图像,从可爱的动物到复杂的场景,每一幅都栩栩如生。特别是在512×512的高分辨率下,图像的细节更加丰富,纹理更加清晰,仿佛能透过屏幕感受到画面中的生命力。 🌈 结论与展望:AI艺术的新纪元 Diffusion-RWKV的出现,无疑为AI图像生成领域带来了一股新的力量。它不仅继承了RWKV在处理长序列时的高效性,还通过巧妙的设计,使其更适合于图像生成任务。这种模型不仅在性能上可以与现有的顶尖模型相媲美,还在计算效率上有明显优势,特别是在处理高分辨率图像时。 未来,我们可以期待看到更多基于Diffusion-RWKV的应用,也许是更高分辨率的图像生成,或者是实时的视频创作。随着模型的进一步优化和硬件的不断进步,AI艺术创作的边界将不断被推进,为我们带来更多惊喜和创新。 Diffusion-RWKV的成功,也为我们提供了一个重要的启示:在AI领域,创新往往来自于对现有技术的巧妙组合和改进。通过将RWKV的高效性与扩散模型的生成能力相结合,研究人员创造出了一个既强大又高效的新模型。这种跨领域的思维碰撞,将继续推动AI技术的发展,为我们开启更多可能性。 让我们共同期待,在不久的将来,Diffusion-RWKV这位AI艺术家能为我们带来更多令人惊叹的作品,让科技与艺术的边界变得更加模糊,创造出更多让人眼前一亮的奇迹。 参考文献:

🖱️ BubbleZone:为你的终端应用注入交互活力

🤯 终端应用开发的苦恼 想象一下,你正在用 BubbleTea 和 Lipgloss 构建一个炫酷的终端应用。你已经熟练地使用它们抽象出布局、颜色、事件等元素,轻而易举地创建出一个用户友好的界面。你甚至用上了 BubbleTea 的鼠标事件支持,实现了像按钮点击、区域悬停等功能。 一切看起来都很美好,直到你的应用开始变得复杂起来。多个组件层层嵌套,子组件又有自己的子组件,就像一个错综复杂的迷宫。这时,你想要实现一个简单的功能:点击某个按钮触发特定操作。然而,你需要先定位鼠标点击的位置,然后一层层地向上遍历组件树,判断哪个组件才是被点击的目标。这就像你要在迷宫里找到特定的一粒沙子,费时费力,让人头疼不已。 ✨ BubbleZone:化解复杂,精准定位 BubbleZone 正是为了解决这个问题而诞生的。它就像是在迷宫里为每一粒沙子都做了标记,让你能够轻松地找到它们。 BubbleZone 的工作原理是什么呢? 🚀 BubbleZone 的优势 💡 使用技巧 为了帮助你更好地使用 BubbleZone,以下是一些实用技巧: 🎉 让你的终端应用充满活力 BubbleZone 为你的终端应用带来了前所未有的交互体验,让你的应用不再是冰冷的命令行工具,而是充满活力的交互式应用。 参考文献:

🍵 一杯代码冲泡的珍珠奶茶:Go 语言 Bubble Tea 初探

“在命令行里工作很酷,会让你感觉自己像黑客电影里的英雄。” 此言不虚!但是,面对单调乏味的文字瀑布,或者令人望而生畏的命令行参数、美元符号前缀,以及各种莫名其妙的错误信息,我们也难免会感到力不从心。 好在,终端世界里除了冰冷的命令行,还有生机勃勃的 TUI(终端用户界面)。TUI 就像一杯珍珠奶茶,在复古的外表下,蕴藏着现代化的体验。而在 Go 语言的世界里, Bubble Tea 库的出现,让制作 TUI 应用变得像泡一杯奶茶一样简单。 🤔 为什么选择 Bubble Tea? 想象一下,你是一位经验丰富的茶饮师,想要调制一杯独一无二的珍珠奶茶。这时,你会选择什么样的工具呢? Bubble Tea 就如同一个功能强大的工具箱,它提供了以下几个不可抗拒的优势: 🚀 从 Hello World 开始 俗话说,万事开头难。让我们从一个简单的 “Hello World” 应用开始,体验一下 Bubble Tea 的魅力吧! 首先,创建一个名为 code-journal 的目录,并在终端中运行以下命令: 然后,创建一个名为 app.go 的文件,并添加以下代码: 接下来,创建另一个名为 simple_page.go 的文件,其中包含我们的第一个 UI,一个只显示一些文本的简单页面: 在终端中运行以下命令,编译并运行我们的应用: 你将会看到如下输出: 恭喜你!你已经成功运行了你的第一个 Bubble Tea 应用。 🔬 剖析代码 现在,让我们像品尝奶茶一样,细细品味一下这段代码。 🧋 Model:Bubble Tea 的核心 … Read more

🕵️‍♂️ Go语言GUI框架迷局:寻找RAD工具的“真命天子”

自上世纪80年代以来,我一直徜徉在代码的世界里。近年来,我一直在探索用Go语言编写GUI程序的各种可能性,尤其希望能找到合适的工具来构建跨平台桌面GUI软件。当然,如果能用同一套技术开发移动版本,那就更令人兴奋了,毕竟,节省开发人员宝贵时间和精力的技术,谁不爱呢? 然而,一番探索下来,我却发现了一个残酷的事实:Go语言目前还没有一个真正好用的GUI框架! 这实在令人惋惜,因为除了GUI这一点,Go语言几乎完美契合了我对易用、快速的应用程序开发工具的所有想象,就像我曾经钟爱的REALBasic(现在更名为价格不菲的Xojo)那样。遗憾的是,到目前为止,还没有任何一个框架或语言+IDE+框架的组合能够超越REALBasic带给我的高效开发体验。 我并非没有尝试过其他的选择。Lazarus和Object Pascal也曾进入我的视野,但Object Pascal毕竟年岁已高,语言本身的局限性难以忽视,而且有时还需要手动管理内存,这对于桌面GUI应用程序来说简直是噩梦。我也曾考虑过其他我比较熟悉且喜欢的语言。 Racket拥有非常完善的GUI工具包,我曾经用它编写和维护过多年的GUI应用程序。然而,用Racket开发的GUI应用程序反应迟钝,启动时间也令人捉急,这使得它在开发“轻快敏捷”的小型GUI应用程序时显得力不从心。 Ada给我的感觉就像是在不断积累技术债务,而且缺乏第三方库的支持。它唯一还算过得去的GUI选项是GTK3。我还尝试过CommonLisp,但它总是给我一种“拼拼凑凑”的感觉,而且现有的第三方库缺乏文档,可靠性也值得怀疑。至于Rust,我已经学习了它的语法,甚至从头到尾啃完了Klabnik和Nichols合著的那本“巨著”,但我不得不承认,Rust给我的感觉是过度设计,并不吸引我。它是否真的适合开发高完整性系统,我持保留意见(我仍然推荐Ada/Spark来完成这类任务)。此外,Rust在GUI编程方面没有任何优势,而且它的社区氛围也让人不敢恭维。 所以,在一番权衡之后,我还是选择了Go语言来开发一个大型项目,而GUI库的选择也提上了日程。以下是我对Go语言GUI框架的个人看法,仅供参考。 🎭 各显神通:Go语言GUI框架大比拼 在Go语言的世界里,GUI框架虽然数量不多,但也称得上是“百花齐放”。下面,我将逐一介绍这些框架的特点、优缺点以及适用场景,希望能帮助读者朋友们找到适合自己的那一款。 1️⃣ Fyne:叫好不叫座? Fyne基本上是一个人带着一群合作者的成果。我的感受是,Fyne的开发者们更擅长推广他们的框架,而不是编写GUI框架。Fyne在设计上存在一些根本性的缺陷。其中最大的问题是,他们试图用完全相同的代码来开发桌面和移动应用程序。要知道,手机和平板电脑的尺寸和交互方式与桌面电脑截然不同,这种“一刀切”的想法显然行不通。桌面应用程序与移动应用程序有着本质的区别,这是Fyne开发者们需要正视的问题。 由于Fyne的设计理念存在偏差,他们做出了一系列令人费解的选择。例如,他们将布局与控件分离,这使得一切都变得异常复杂,使用起来一点也不简单。Fyne提供的布局机制倾向于将其内容最小化,控件只存储最小尺寸(所有控件的默认值),而没有首选尺寸或最大尺寸。此外,Fyne的控件没有锁定顶部、左侧、底部、右侧或其他合理的机制来控制它们在嵌入窗口或面板大小调整时的行为。Fyne还没有Z-order机制来控制控件之间的切换顺序。 另一个大问题是,Fyne缺乏合理的文件路径抽象。开发者们坚持认为所有东西都应该是URL,显然没有意识到URL标准并没有以跨平台的方式指定包含卷信息的绝对路径。虽然URI方案有一些扩展可以使用盘符,Fyne也使用了一些他们认为合适的方案,但这些基于/或\的本地文件系统路径转换存在很多问题。例如,如何处理可移动驱动器?如何处理Windows上的盘符?如何构造路径、遍历文件系统?到目前为止,Fyne并没有提供任何帮助,甚至坚持认为每个URI都代表一个任意的资源,你不应该假设它指向一个文件,它也可能是一个网络资源。难道网络访问和文件访问真的可以一概而论吗? 总而言之,Fyne并不适合开发桌面应用程序,尽管它在移动平台上可能还不错。用Fyne很难设计出复杂的桌面应用程序界面。默认情况下,Fyne应用程序会违反所有平台上的人机界面指南,而开发者们似乎对此感到非常自豪。你将不得不花费数天甚至数周的时间来为一些简单的事情创建自己的专用布局算法,而这些事情在其他合理的、标准的布局系统中只需几分钟或几小时就能完成。 2️⃣ Gio:未来可期 Gio是一个非常有前途的立即模式GUI框架,它也包含一些状态ful控件。一些人认为它是Fyne的良好替代品,它拥有你在应用程序中期望的大多数控件。在我看来,Gio的使用方法似乎有些复杂和繁琐——如果你查看示例代码,就会发现即使是简单的入门程序也需要编写大量的样板代码。然而,Gio最大的缺点是缺乏文档,这使得它很难上手,你在一开始可能会迷失方向。尽管如此,我仍然计划在将来找个时间试用一下Gio,至少将其作为GIU的替代方案进行测试。我还没有测试过它对编辑器控件的支持程度——框架是否能够支持复杂的文本编辑(多行文本、富文本甚至嵌入图像)是衡量GUI框架优劣的试金石之一,因为多行文本编辑是目前为止最难正确实现的功能。我还没有仔细研究过Gio的代码,但我猜测它在这方面的表现应该与Giu类似。 3️⃣ Giu:小项目利器 Giu是一个不太为人知的立即模式GUI框架,它基于imgui的Go语言分支,使用了imgui的C语言库。Giu非常易于使用,在我测试过的所有GUI框架中,它可能是让我最快获得满意结果的框架,尽管它的速度比不上Lazarus这样的传统RAD工具。Giu拥有你可能需要的大多数控件,但有两个明显的缺陷: 因此,你应该意识到这可能是一个相当大的限制。然而,与Fyne不同的是,Giu的所有默认设置都很合理,而且用它很容易就能创建出简单到中等复杂度的GUI,例如包含列表、一些编辑字段、按钮、组合框或单选按钮、菜单以及一两个窗口拆分器的界面。Giu的外观和感觉一点也不原生,但总体来说还不错。你可以访问底层的imgui库,但要注意,imgui本身非常简陋,Go语言版本没有像C语言版本那样提供高级的状态ful控件。 4️⃣ GTK:老牌劲旅 5️⃣ IUP:简单易用 6️⃣ Qt:受 licensing 限制 7️⃣ Unison:值得关注 我最近才发现Unison,目前还无法对其做出评价。Unison看起来是一个不错的非原生GUI框架,它提供了许多标准控件,并且正在为作者的个人项目进行开发。Unison的代码看起来非常清晰易懂,所以我建议你尝试一下。我以后也会对它进行更广泛的测试。当然,Unison目前还不能用于生产环境,尤其是大型GUI项目。 8️⃣ Wails:Web 开发者的福音 Wails是这份清单中唯一的基于Web的GUI框架,因为它不是我的首要选择。Wails允许你使用Go语言编写后端代码,并使用任何你喜欢的Web框架来开发GUI。Wails会自动将Go代码与HTML中的Javascript代码链接起来,并渲染HTML/JS代码。最终的产物是一个功能齐全的桌面应用程序。我在很多地方都看到过人们推荐Wails,并将其与各种前端库结合使用。 如果你本来就擅长开发Web应用程序,那么我强烈推荐你尝试一下Wails。我的目标是使用一个允许我完全使用Go语言开发所有组件的GUI库,因此Wails不在我的考虑范围之内。然而,基于Web的界面可以做得非常漂亮,而且熟悉Web设计的开发者可能会发现Wails比任何非原生的、纯Go语言的GUI库(通常基于Open GL后端渲染引擎)都要好用。如果你希望你的应用程序看起来像一个网页(或者希望保留将其变成真正的Web应用程序的选项),那么Wails可能是最容易实现这一目标的选择。 🏆 总结:路漫漫其修远兮 总的来说,Go语言的GUI框架选择还是比较有限的。我选择Giu来开发一个项目,但其实选择Gio也无妨。但我必须承认,我并不喜欢立即模式GUI。如果你的GUI比较复杂,你最终将不得不编写额外的“布局缓冲区”粘合代码来维护状态。例如,我需要从sqlite数据库中获取和设置数据,但Giu的文本字段只支持字符串,所以我必须单独维护字符串,并在适当的时候从数据库中获取/更新数据。也许GTK4是更好的选择,我最终可能会改用GTK4。我将来也可能会再给Fyne一次机会,但我不抱太大希望。Fyne的设计理念过于固执,而且方向也不对。我还考虑过在正式项目中尝试Wails。对我来说,学习Wails的成本会很高,因为我的Web设计知识还停留在上世纪90年代末。然而,Wails在灵活性和重新设计方面的优势可能值得我为之付出努力。 📚 参考文献 原文链接: https://medium.com/@balle.johannes/no-good-go-gui-9f54813e9bf