我使用了一个包,它返回的不是string,而是economy.ClassId。您可以看到here我想传递economy.ClassId,它只是一个数字字符串,比如“531569319,”给一个函数,它接受的是字符串,而不是economy.ClassId,所以有没有办法把这个类型转换成字符串,或者没有,谢谢。我知道你可能喜欢strconv.FormatUint(),但是我会用什么来定制类型呢?
string
economy.ClassId
strconv.FormatUint()
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/cgdQZNR8GFPS:首字母缩写词(ID)也应全部大写http://talks.golang.org/2014/names.slide#6
0pizxfdo2#
ClassId被声明为type ClassId uint64,因此尽管ClassId与uint64不完全相同,但它们具有相同的 * 底层类型 *,因此您可以将一个值x * 转换为另一个类型。要将值x转换为类型T(如果允许),您可以编写T(x)。因此,在您的示例中:
ClassId
type ClassId uint64
uint64
x
T
T(x)
funcThatTakesAString(strconv.FormatUint(uint64(classId), 10))
p1tboqfb3#
另一种可能更惯用的方法是使用Go语言的format string specification来使用fmt.Sprintf。两个例子...下面的代码将classId转换为以10为基数的字符串数字:classIDStr := fmt.Sprintf("%d", classId)下面的代码将其转换为字符串十六进制数,其中a-f位为小写:classIDHex := fmt.Sprintf("%x", classId)
classIDStr := fmt.Sprintf("%d", classId)
classIDHex := fmt.Sprintf("%x", classId)
unguejic4#
下面是将具有底层string类型的自定义类型转换回string的示例:
type CustomType string const ( StereoType CustomType = "stereotype" ArcheType CustomType = "archetype" ) func printString(word string) { println(word) }
现在,如果调用printString(StereoType),将得到一个编译错误
printString(StereoType)
cannot use StereoType (constant "stereotype" of type CustomType) as type string in argument to printString
解决方案是将其转换回string,如下所示:
printString(string(StereoType))
4条答案
按热度按时间brgchamk1#
更一般地说,您可以在类型www.example.com上实现stringer接口https://golang.org/pkg/fmt/#Stringer
并使用其他函数(classId.String())
http://play.golang.org/p/cgdQZNR8GF
PS:首字母缩写词(ID)也应全部大写
http://talks.golang.org/2014/names.slide#6
0pizxfdo2#
ClassId
被声明为type ClassId uint64
,因此尽管ClassId
与uint64
不完全相同,但它们具有相同的 * 底层类型 *,因此您可以将一个值x
* 转换为另一个类型。要将值x
转换为类型T
(如果允许),您可以编写T(x)
。因此,在您的示例中:p1tboqfb3#
另一种可能更惯用的方法是使用Go语言的format string specification来使用fmt.Sprintf。
两个例子...
下面的代码将classId转换为以10为基数的字符串数字:
classIDStr := fmt.Sprintf("%d", classId)
下面的代码将其转换为字符串十六进制数,其中a-f位为小写:
classIDHex := fmt.Sprintf("%x", classId)
unguejic4#
下面是将具有底层
string
类型的自定义类型转换回string
的示例:现在,如果调用
printString(StereoType)
,将得到一个编译错误解决方案是将其转换回
string
,如下所示: