在这个奇怪的例子中,有人创建了一个新类型,它实际上只是一个字符串:
type CustomType string
const (
Foobar CustomType = "somestring"
)
func SomeFunction() string {
return Foobar
}
但是,此代码无法编译:
不能在返回参数
中使用Foobar(类型CustomType)作为类型字符串
你如何修复SomeFunction,以便它能够返回Foobar的字符串值(" somestring")?
答案 0 :(得分:20)
Convert字符串的值:
func SomeFunction() string {
return string(Foobar)
}
答案 1 :(得分:3)
最好为String
定义Customtype
函数 - 它可以让您的生活更轻松 - 您可以更好地控制事物,如果结构发展。如果您确实需要SomeFunction
,请让它返回Foobar.String()
package main
import (
"fmt"
)
type CustomType string
const (
Foobar CustomType = "somestring"
)
func main() {
fmt.Println("Hello, playground", Foobar)
fmt.Printf("%s", Foobar)
fmt.Println("\n\n")
fmt.Println(SomeFunction())
}
func (c CustomType) String() string {
fmt.Println("Executing String() for CustomType!")
return string(c)
}
func SomeFunction() string {
return Foobar.String()
}
答案 2 :(得分:1)
答案 3 :(得分:1)
为来这里搜索的任何人回答此问题。您可以使用fmt.Sprintf
返回时将类型转换为字符串click here to see it in action
func SomeFunction() string {
return fmt.Sprintf("%v", Foobar)
}
答案 4 :(得分:0)
对于每种类型T,都有一个对应的转换操作T(x) 将值x转换为类型T。从一种类型转换为 如果两个都具有相同的基础类型,或者两个都允许 是指向相同变量的未命名指针类型 基础类型这些转换会更改类型,但不会更改 值的表示形式。如果x可分配给T,则进行一次转换 是允许的,但通常是多余的。 -摘自The Go Programming Language - by Alan A. A. Donovan
根据您的示例,下面是一些将返回值的不同示例。
package main
import "fmt"
type CustomType string
const (
Foobar CustomType = "somestring"
)
func SomeFunction() CustomType {
return Foobar
}
func SomeOtherFunction() string {
return string(Foobar)
}
func SomeOtherFunction2() CustomType {
return CustomType("somestring") // Here value is a static string.
}
func main() {
fmt.Println(SomeFunction())
fmt.Println(SomeOtherFunction())
fmt.Println(SomeOtherFunction2())
}
它将输出:
somestring
somestring
somestring