在Go中将自定义类型转换为字符串

时间:2017-08-26 03:15:11

标签: string go type-conversion

在这个奇怪的例子中,有人创建了一个新类型,它实际上只是一个字符串:

type CustomType string

const (
        Foobar CustomType = "somestring"
)

func SomeFunction() string {
        return Foobar
}

但是,此代码无法编译:

  

不能在返回参数

中使用Foobar(类型CustomType)作为类型字符串

你如何修复SomeFunction,以便它能够返回Foobar的字符串值(" somestring")?

5 个答案:

答案 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()
    }

https://play.golang.org/p/jMKMcQjQj3

答案 2 :(得分:1)

你可以像这样转换:

var i int = 42 var f float64 = float64(i)

检查here

你可以这样回来:

return string(Foobar)

答案 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

The Go Playground link