代码之家  ›  专栏  ›  技术社区  ›  DaveUK

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

  •  53
  • DaveUK  · 技术社区  · 7 年前

    type CustomType string
    
    const (
            Foobar CustomType = "somestring"
    )
    
    func SomeFunction() string {
            return Foobar
    }
    

    但是,此代码无法编译:

    不能将Foobar(类型CustomType)用作返回参数中的类型字符串

    如何修复SomeFunction,使其能够返回Foobar的字符串值(“somestring”)?

    4 回复  |  直到 6 年前
        1
  •  57
  •   Cerise Limón    7 年前

    Convert 字符串的值:

    func SomeFunction() string {
            return string(Foobar)
    }
    
        2
  •  24
  •   Ravi R    7 年前

    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

        3
  •  6
  •   Krishnadas PC    5 年前

    将值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

        4
  •  1
  •   Ashish Tiwari    7 年前

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

    检查 here

    return string(Foobar)