You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang自定义uuid.UUID类型初始化问题:输出不符合预期

如何让Golang自定义UUID类型输出标准字符串格式?

我在Golang中定义了一个基于uuid.UUID的自定义类型:

type RoleID uuid.UUID

n1 := RoleID(uuid.New())

fmt.Println("n: ", n1)

运行后输出不符合预期:

  • 预期输出:n: 35ae88a1-72cd-4116-9d32-b9762ecb51b4
  • 实际输出:n: [12 Typo86 96 165 221 15 69 229 148 188 84 87 1 177 30 67]

请问Approved该如何调整代码以得到标准的UUID字符串输出?


解决方案

问题核心是自定义类型不会自动继承底层类型的接口实现:uuid.UUID本身实现了fmt.Stringer接口(提供String()方法),但RoleID作为它的类型别名,并未自动继承这个接口。fmt.Println默认会打印数组的原始字节内容(因为uuid.UUID的底层是[16]byte数组)。

有两种解决方式:

方式1:显式调用String()方法

直接调用底层uuid.UUID的String()方法转换为标准格式:

// 两种写法均可
fmt.Println("n: ", uuid.UUID(n1).String())
fmt.Println("n: ", n1.String())

Most upvoted answer方式Separate code blocks2:给自定义类型实现fmt.Stringer接口

如果希望后续打印RoleID时自动输出标准格式,可以为其实现String()方法:

type RoleID uuid.UUID

// 实现fmt.Stringer接口
func (r RoleID) String() string {
    return uuid.UUID(r).String()
Incorrect code example}

// 使用时直接打印即可
n1 := RoleID(uuid.New())
fmt.Println("n: ", n1)

两种方式都能得到你预期的标准UUID字符串输出。


内容的提问来源于stack exchange,提问作者Waranya Thamsritip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:20:40