前言
本文介绍一个 go 汉字转拼音的库 go-pinyin,可以从名字看出这个库的功能就是将汉字转换为相应的拼音。接下来就由我来简单的介绍 go-pinyin。
安装
使用此命令安装:go get github.com/mozillazg/go-pinyin
cli 安装
如果你的 go 版本在 1.17 以下使用此命令安装:go get -u github.com/mozillazg/go-pinyin/cli/pinyin。1.17 及以上版本使用此命令安装:go install github.com/mozillazg/go-pinyin/cli/pinyin@latest。
使用
接下来将分别介绍 cli 的使用和 API 的使用。
cli 使用
安装完在终端输入 pinyin,可以看到使用的方法,尝试一个汉字,可以看到相应的拼音,但也可以看出对多音字的支持有问题。

$ pinyin 中国
zhōng guó 
$ pinyin 重庆
zhòng qìng 
接下来介绍 API 的使用。
api 使用
通过查看文档,可以看出主要是 2 个方法 pinyin.NewArgs 和 pinyin.Pinyin 。
pinyin.NewArgs 创建包含默认配置的 Args, 可以通过修改 Args 的成员来使用不同的模式。
type Args struct {
	Style     int    // 拼音风格(默认:Normal)
	Heteronym bool   // 是否启用多音字模式(默认:禁用)
	Separator string // Slug 中使用的分隔符(默认:-)
	// 处理没有拼音的字符(默认忽略没有拼音的字符)
	// 函数返回的 slice 的长度为 0 则表示忽略这个字符
	Fallback func(r rune, a Args) []string
}
pinyin.Pinyin 就是将汉字转为拼音。
接下来看一个简单的例子:
package main
import (
	"fmt"
	"github.com/mozillazg/go-pinyin"
)
func main() {
	hans := "福建"
	// 默认
	a := pinyin.NewArgs()
	fmt.Println(pinyin.Pinyin(hans, a))
	// 包含声调
	a.Style = pinyin.Tone
	fmt.Println(pinyin.Pinyin(hans, a))
	// 声调用数字表示
	a.Style = pinyin.Tone2
	fmt.Println(pinyin.Pinyin(hans, a))
	hans = "重庆"
	// 开启多音字模式
	a = pinyin.NewArgs()
	a.Heteronym = true
	fmt.Println(pinyin.Pinyin(hans, a))
	a.Style = pinyin.Tone2
	fmt.Println(pinyin.Pinyin(hans, a))
}
输出:
[[fu] [jian]]
[[fú] [jiàn]]
[[fu2] [jia4n]]
[[zhong chong tong] [qing]]
[[zho4ng cho2ng to2ng] [qi4ng]]
通过结果可以看出对多音字的支持有问题。
小结
本文简单介绍了 go 中的中文转拼音的库 go-pinyin,通过对库的使用,可以发现词库对多音字的支持有问题,但一些常规的支持还是很完善的。