go

  • 2023 年 12 月 25 日

解决 fyne 中文乱码问题

最近尝试使用 fyne 做一些简单的桌面应用,首先遇到的是中文乱码问题,目前主要有两种方案:

  1. 将字体文件打包成 go 文件;
  2. 使用 ENV 环境变量。

Read more 
  • 2023 年 12 月 22 日

mac 平台上交叉编译 fyne 项目到 windows 平台

直接交叉编译时,会提示 build constraints exclude all Go files in /path/go/pkg/mod/github.com/go-gl/gl@.. 的错误。编译时添加环境变量 CGO_ENABLED=1 后,提示错误 gcc_libinit_windows.c:8:10: fatal error: 'windows.h' file not found

解决方法:

安装 mingw-w64brew install mingw-w64 编译: env CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -o 'bin/project_gui.exe'

Read more 
  • 2021 年 12 月 22 日

Go 中使用 `singleflight` 防止缓存击穿

go

一个典型的使用缓存的案例:

// GetConfig 获取 key 指定的配置项
func GetConfig(key string) (Config, bool) {
	cacheKey := "cfg:" + key
    
    // 如果缓存中查到则直接返回缓存数据
	if v, has := Cache().Get(cacheKey); has {
		if cfg, ok := v.(Config); ok {
			return cfg, true
		}
	}

    // 不在缓存中则从数据库中查找
	cfg := Config{}
	if err := DB().Where("`key`=?", key).First(&cfg).Error; err != nil {
		return cfg, false
	}

    // 将数据库中查到的值写入缓存, 300 秒过期
	Cache().Store(cacheKey, cfg, 300)
	return cfg, true
}

但这样存在一个问题: 如果 300 秒缓存过期时,有大量并发产生,将会导致这些并发在缓存中都找不到数据去查数据库的情况,从而发生所谓的缓存击穿。

Read more 
  • 2021 年 01 月 16 日

Go 语言中 Map、Slice、Chan 的传值方式对比

go
Read more 
  • 2020 年 08 月 04 日

一些 Go 终端交互库

Read more 
  • 2020 年 01 月 02 日

Go 程序编译时添加 git 版本信息

Go 程序编译时添加 git 版本信息

Read more 
  • 2018 年 08 月 02 日

Go 语言获取运行时内存使用情况

go

在使用 Go 语言时,获取程序运行时的内存使用情况。

Read more 
  • 2018 年 07 月 30 日

Go 语言的跨平台交叉编译

go

将你的 Go 语言程序编译到不同的平台

Read more 
  • 2018 年 07 月 30 日

Go exec 的输入输出重定向

go
Read more