Dans cet exemple bizarre, quelqu'un a créé un nouveau type qui n'est en réalité qu'une chaîne:
type CustomType string
const (
Foobar CustomType = "somestring"
)
func SomeFunction() string {
return Foobar
}
Cependant, ce code ne parvient pas à compiler:
ne peut pas utiliser Foobar (type CustomType) comme chaîne de type dans l'argument de retour
Comment répareriez-vous SomeFunction afin qu'il puisse renvoyer la valeur de chaîne de Foobar ("somestring")?
Convertir la valeur en chaîne:
func SomeFunction() string {
return string(Foobar)
}
Mieux vaut définir une fonction String
pour Customtype
- cela peut vous rendre la vie plus facile au fil du temps - vous contrôlez mieux les choses au fur et à mesure que la structure évolue. Si vous avez vraiment besoin de SomeFunction
, laissez-le retourner 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()
}
Pour chaque type T, il existe une opération de conversion correspondante T (x) qui convertit la valeur x en type T. Conversion d'un type en un autre est autorisé si les deux ont le même type sous-jacent ou si les deux sont des types de pointeurs non nommés qui pointent vers des variables du même type sous-jacent; ces conversions changent le type mais pas le représentation de la valeur. Si x est assignable à T, une conversion est autorisé mais est généralement redondant. - Extrait de The Go Langage de programmation - de Alan A. A. Donovan
Selon votre exemple, voici quelques exemples qui renverront la valeur.
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())
}
Il produira:
somestring
somestring
somestring