Go语言 如何将自定义类型转换为字符串?

vfhzx4xs  于 2023-01-15  发布在  Go
关注(0)|答案(4)|浏览(164)

我使用了一个包,它返回的不是string,而是economy.ClassId。您可以看到here
我想传递economy.ClassId,它只是一个数字字符串,比如“531569319,”给一个函数,它接受的是字符串,而不是economy.ClassId,所以有没有办法把这个类型转换成字符串,或者没有,谢谢。
我知道你可能喜欢strconv.FormatUint(),但是我会用什么来定制类型呢?

brgchamk

brgchamk1#

更一般地说,您可以在类型www.example.com上实现stringer接口https://golang.org/pkg/fmt/#Stringer

func (c ClassId) String() string {
    return strconv.FormatUint(uint64(c),10)
}

并使用其他函数(classId.String())
http://play.golang.org/p/cgdQZNR8GF
PS:首字母缩写词(ID)也应全部大写
http://talks.golang.org/2014/names.slide#6

0pizxfdo

0pizxfdo2#

ClassId被声明为type ClassId uint64,因此尽管ClassIduint64不完全相同,但它们具有相同的 * 底层类型 *,因此您可以将一个值x * 转换为另一个类型。要将值x转换为类型T(如果允许),您可以编写T(x)。因此,在您的示例中:

funcThatTakesAString(strconv.FormatUint(uint64(classId), 10))
p1tboqfb

p1tboqfb3#

另一种可能更惯用的方法是使用Go语言的format string specification来使用fmt.Sprintf。
两个例子...
下面的代码将classId转换为以10为基数的字符串数字:
classIDStr := fmt.Sprintf("%d", classId)
下面的代码将其转换为字符串十六进制数,其中a-f位为小写:
classIDHex := fmt.Sprintf("%x", classId)

unguejic

unguejic4#

下面是将具有底层string类型的自定义类型转换回string的示例:

type CustomType string

const (
    StereoType CustomType = "stereotype"
    ArcheType CustomType  = "archetype"
)

func printString(word string) {
    println(word)
}

现在,如果调用printString(StereoType),将得到一个编译错误

cannot use StereoType (constant "stereotype" of type CustomType) as type string in argument to printString

解决方案是将其转换回string,如下所示:

printString(string(StereoType))

相关问题