この奇妙な例では、誰かが実際に単なる文字列である新しい型を作成しました:
type CustomType string
const (
Foobar CustomType = "somestring"
)
func SomeFunction() string {
return Foobar
}
ただし、このコードはコンパイルに失敗します。
foobar(CustomType型)を戻り引数の型文字列として使用できません
Foobarの文字列値( "somestring")を返すことができるように、SomeFunctionをどのように修正しますか?
変換 文字列への値:
func SomeFunction() string {
return string(Foobar)
}
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()
}
タイプ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