web-dev-qa-db-ja.com

Goでカスタムタイプを文字列に変換する

この奇妙な例では、誰かが実際に単なる文字列である新しい型を作成しました:

type CustomType string

const (
        Foobar CustomType = "somestring"
)

func SomeFunction() string {
        return Foobar
}

ただし、このコードはコンパイルに失敗します。

foobar(CustomType型)を戻り引数の型文字列として使用できません

Foobarの文字列値( "somestring")を返すことができるように、SomeFunctionをどのように修正しますか?

13
DaveUK

変換 文字列への値:

func SomeFunction() string {
        return string(Foobar)
}
23
Cerise Limón

StringCustomtype関数を定義する方が良い-それは時間の経過とともにあなたの生活を楽にすることができます-構造が進化するように、物事をよりよく制御できます。本当に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/jMKMcQjQj

3
Ravi

次のように変換できます。

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

チェック ここ

次のように戻ることができます:

return string(Foobar)

1
Ashish Tiwari

タイプTごとに、値xをタイプTに変換する対応する変換操作T(x))があります。両方の基になるタイプが同じ場合、あるタイプから別のタイプへの変換が許可されます。または、両方が同じ基本型の変数を指す名前のないポインター型である場合、これらの変換は型を変更しますが、値の表現は変更しませんxがTに割り当て可能な場合、変換は許可されますが、通常は冗長です。 Goプログラミング言語-Alan AA 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

Go Playgroundリンク

1
Krishnadas PC