鸿蒙 PC下如何进行Go 三方库开发:strcase 库实现各类命名格式互转实操
欢迎加入开源鸿蒙PC社区: https://harmonypc.csdn.net/
欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper
AtomGit 仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_go_cgo
本文讲解鸿蒙PC基于musl库、应用沙箱与二进制强制签名机制,不原生支持Go语言,通用Linux编译产物无法直接运行。需借助社区Harmonybrew包管理器搭建开发环境:纯Go开发安装go与ohos-sdk,依托SDK实现编译自动签名;CGO跨语言开发需额外安装llvm-gcc-compat补齐cc编译命令,编译时手动开启CGO参数。搭配CodeArts IDE可完成全流程开发,同时需提前处理软件冲突、使用原生终端规避环境报错。
搭建环境的话,可以参考以下文章:OpenHarmony 鸿蒙 PC + CodeArts IDE 实现 Go开发完整开发环境搭建指南
一、strcase 库介绍
1. 作用
github.com/iancoleman/strcase 是 Go 语言专业字符串大小写格式转换工具库,专门处理各类命名风格互相转换,开发中常用于:
- 数据库蛇形字段 ↔ Go 结构体驼峰字段转换(ORM 映射高频场景)
- 变量、常量、接口命名格式统一转换
- 批量格式化命名字符串,支持 6 种主流命名格式:
- 小驼峰 camelCase
- 大驼峰 PascalCase
- 下划线蛇形 snake_case
- 大写下划线 SNAKE_CASE
- 短横线 kebab-case
- 短横线大写 KEBAB-CASE
2. 安装命令
go get github.com/iancoleman/strcase

二、完整可运行无报错示例代码
新建 main.go,直接复制执行,无需额外配置:
package main
import (
"fmt"
"strings"
"github.com/iancoleman/strcase"
)
// 兼容低版本strcase,手动实现大驼峰 PascalCase
func toPascal(s string) string {
camel := strcase.ToCamel(s)
if camel == "" {
return ""
}
// 首字母转大写
return strings.ToUpper(camel[:1]) + camel[1:]
}
func main() {
originStr := "UserInfoUserId"
fmt.Println("原始字符串:", originStr)
// 1. 小写蛇形(数据库字段)
snake := strcase.ToSnake(originStr)
fmt.Println("小写蛇形 snake_case:", snake)
// 2. 大写蛇形(常量)
screamingSnake := strcase.ToScreamingSnake(originStr)
fmt.Println("大写蛇形 SNAKE_CASE:", screamingSnake)
// 3. 小驼峰 camelCase(变量)
camel := strcase.ToCamel(snake)
fmt.Println("小驼峰 camelCase:", camel)
// 4. 手动兼容实现大驼峰 PascalCase(解决 undefined: ToPascal 报错)
pascal := toPascal(snake)
fmt.Println("大驼峰 PascalCase:", pascal)
// 5. 短横线 kebab-case
kebab := strcase.ToKebab(originStr)
fmt.Println("小写短横线 kebab-case:", kebab)
// 6. 大写短横线
screamingKebab := strcase.ToScreamingKebab(originStr)
fmt.Println("大写短横线 KEBAB-CASE:", screamingKebab)
// ORM 实战:数据库字段转结构体字段
dbField := "user_name"
structField := toPascal(dbField)
fmt.Printf("\n数据库字段[%s] → Go结构体字段[%s]\n", dbField, structField)
}

1. 包与导入部分
package main
声明当前文件是可执行程序入口包,不是库文件,编译后能直接运行。
import (
"fmt"
"strings"
"github.com/iancoleman/strcase"
)
fmt:标准输入输出库,用来打印控制台日志;strings:Go内置字符串工具,这里用来把首字母转大写;strcase:第三方命名格式转换库,专门处理驼峰、下划线、短横线命名互相转换。
2. 自定义兼容函数 toPascal
// 兼容低版本strcase,手动实现大驼峰 PascalCase
func toPascal(s string) string {
camel := strcase.ToCamel(s)
if camel == "" {
return ""
}
// 首字母转大写
return strings.ToUpper(camel[:1]) + camel[1:]
}
作用背景
低版本 strcase 库没有内置 ToPascal() 大驼峰方法,直接调用会报 undefined 编译错误,所以手动封装兼容方案:
strcase.ToCamel(s):先把字符串转为小驼峰,例:user_info→userInfo;- 判断空字符串,避免切片报错;
strings.ToUpper(camel[:1])取出第一个字符转大写:u→U;- 拼接剩余字符,最终得到大驼峰 PascalCase:
userInfo→UserInfo。
3. main 主函数(程序执行入口)
originStr := "UserInfoUserId"
fmt.Println("原始字符串:", originStr)
定义测试原始字符串「大驼峰格式」,作为转换输入源。
① ToSnake 小写蛇形(数据库字段专用)
snake := strcase.ToSnake(originStr)
fmt.Println("小写蛇形 snake_case:", snake)
输出:user_info_user_id
场景:GORM数据库表字段、mysql列名规范。
② ToScreamingSnake 大写蛇形(常量专用)
screamingSnake := strcase.ToScreamingSnake(originStr)
fmt.Println("大写蛇形 SNAKE_CASE:", screamingSnake)
输出:USER_INFO_USER_ID
场景:Go常量、枚举值命名,如 ORDER_STATUS_SUCCESS。
③ ToCamel 小驼峰(变量命名)
camel := strcase.ToCamel(snake)
fmt.Println("小驼峰 camelCase:", camel)
输出:userInfoUserId
场景:Go函数内部局部变量、接口json字段。
④ 自定义toPascal 大驼峰(结构体字段)
pascal := toPascal(snake)
fmt.Println("大驼峰 PascalCase:", pascal)
输出:UserInfoUserId
场景:Go导出结构体、对外暴露的字段名(Go规范:首字母大写才能外部访问)。
⑤ ToKebab 小写短横线(前端/HTTP参数)
kebab := strcase.ToKebab(originStr)
fmt.Println("小写短横线 kebab-case:", kebab)
输出:user-info-user-id
场景:URL路径、前端css类名、http请求header参数。
⑥ ToScreamingKebab 大写短横线
screamingKebab := strcase.ToScreamingKebab(originStr)
fmt.Println("大写短横线 KEBAB-CASE:", screamingKebab)
输出:USER-INFO-USER-ID
场景:环境变量、特殊header标识。
⑦ ORM业务实战示例
dbField := "user_name"
structField := toPascal(dbField)
fmt.Printf("\n数据库字段[%s] → Go结构体字段[%s]\n", dbField, structField)
模拟开发最常用场景:
数据库下划线字段 user_name,自动转为Go结构体规范大驼峰 UserName,用于GORM自动映射表与结构体。
完整运行输出
原始字符串: UserInfoUserId
小写蛇形 snake_case: user_info_user_id
大写蛇形 SNAKE_CASE: USER_INFO_USER_ID
小驼峰 camelCase: userInfoUserId
大驼峰 PascalCase: UserInfoUserId
小写短横线 kebab-case: user-info-user-id
大写短横线 KEBAB-CASE: USER-INFO-USER-ID
数据库字段[user_name] → Go结构体字段[UserName]
整体用途总结
这段代码基于 strcase 实现全风格命名互相转换,解决低版本库缺失Pascal方法的兼容问题,核心用于后端ORM开发、接口参数格式化、常量/结构体命名规范化。
搭配你的鸿蒙PC环境,不能直接 go run,必须先编译、签名再运行:
go build -o main main.go
chmod +x ./main
ohos-signpost ./main
./main
三、执行输出结果
原始字符串: UserInfoUserId
小写蛇形 snake_case: user_info_user_id
大写蛇形 SNAKE_CASE: USER_INFO_USER_ID
小驼峰 camelCase: userInfoUserId
大驼峰 PascalCase: UserInfoUserId
小写短横线 kebab-case: user-info-user-id
大写短横线 KEBAB-CASE: USER-INFO-USER-ID
数据库字段[user_name] 对应Go结构体字段[UserName]
四、常用业务场景说明
- GORM ORM 映射
数据库字段user_phone自动转 Go 结构体UserPhone,反向结构体转数据库字段; - 接口参数转换
前端传递短横线user-token,后端统一转驼峰userToken; - 常量定义
业务枚举常量统一转为大写蛇形ORDER_STATUS_SUCCESS; - 代码生成工具
解析表结构自动生成结构体时批量格式化字段名。
更多推荐


所有评论(0)