Show HN: Build offline-first web apps in pure Go and HTML16 days agohttps://swag.mills.ioSwag允许使用Go和HTML构建离线优先的网络应用,无需JavaScript。它将Go处理程序和模板编译为WebAssembly,在首次访问后通过Service Worker在本地运行。双重部署:同一应用既能原生处理HTTP请求,又能作为WASM支持离线使用。功能包括持久存储、同步、PWA清单和缓存版本管理。参考应用展示了实时Markdown预览和离线社交源阅读功能。
Go-Flavored Concurrency in C11 days agohttps://antonz.org/concurrency-in-c/Go 的并发模型因其轻量级的 goroutine、通道以及高效的运行时调度器而广受欢迎,但在 C 语言中仅使用 POSIX 线程来复现该模型时,需要做出一些权衡。Solod(So)基于 pthread 原语实现了一个并发栈:sync.Mutex 和 sync.Cond 包装了 pthread_mutex_t 和 pthread_cond_t,提供了基本的同步机制。So 中的原子操作直接映射到 C 的 __atomic 内置函数,在加载、存储和比较交换操作上与 Go 的性能相当,且无需 pthread 的开销。So 的 conc.Pool 使用固定数量的工作线程和一个共享任务队列,通过互斥锁和条件变量构建,适用于粗粒度工作负载,但不适用于像 goroutine 那样数千个阻塞任务的情况。So 中的通道(conc.Chan[T])支持缓冲和无缓冲模式,使用互斥锁和条件变量进行同步,在池化任务方面性能接近 Go,但在细粒度任务传递方面由于内核唤醒开销而较慢。基准测试显示,So 基于 pthread 的并发实现在无竞争锁和原子操作方面具有竞争力,但当线程阻塞时,条件变量和通道的性能显著下降,无缓冲通道传输可能慢达 23 倍。设计决策包括使用 pthread 而非纤程以简化实现,将并发功能保留在标准库中以支持显式分配和灵活性,并为通道操作提供超时机制而非 select 语句。该方法在粗粒度工作负载下提供了简单性且性能接近 Go,但由于内核线程管理开销,无法在细粒度并发方面匹配 Go 的效率。
Building the Pkg.go.dev TUI Explorer20 hours agohttps://packagemain.tech/p/building-a-pkggodev-tui-explorer新的 pkg.go.dev API 提供了对包元数据、模块版本、符号、漏洞等的编程访问,无需抓取 HTML。该 API 附带官方的 OpenAPI 规范发布,使得使用 oapi-codegen 等工具生成 Go 客户端变得容易。作者使用 Bubble Tea 构建了一个终端 UI,可完全在终端中浏览 Go 文档,通过避免切换到浏览器来改进工作流程。该终端 UI 目前支持搜索包、浏览模块版本以及检查导出的符号,未来可能增加漏洞浏览和依赖树等功能。生成的 API 客户端在 OpenAPI 规范中存在一些小问题,已在本地修复,并且某些响应类型需要手动扩展。应用程序架构使用 Bubble Tea 的消息驱动模型,将状态、网络和渲染清晰地分离开来。作者强调该 API 是 Go 工具链的重要补充,使得开发编辑器插件、终端工具和自动化更加容易。