Sorry für den mehrdeutigen Titel sein sollte. Ich bekomme keinen Compilerfehler, wenn ich glaube, dass ich basierend auf dem Erstellen eines neuen Typs und einer Funktion, die ein Argument dieses Typs verwendet, sollte.Go Typ automatisch konvertieren, wenn es scheint, dass es nicht
Das Beispiel:
package search
//Some random type alias
type Search string
//Takes a string and returns Search
func NewSearch(s string) Search {
return Search(s)
}
//This is where things are getting weird
//Returns an int just for arbitrary testing
func PrintSearch(s Search) int{
return 5
}
Nun wäre meine Vermutung sein, wenn ich ein Objekt mit NewSearch
erstellt, würde ich in der Lage sein, es zu Druckensuche weitergeben und alles wie erwartet laufen, aber wenn übergebe ich Druckensuche eine primitive Zeichenfolge, sollte es nicht kompilieren. Ich erlebe dieses Verhalten nicht.
Der Hauptcode:
package main
import (
"fmt"
".../search" //no need to type the whole path here
)
func main() {
SearchTerm := search.NewSearch("Test")
StringTerm := "Another test"
fmt.Println(search.PrintSearch(SearchTerm)) // This should print 5
fmt.Println(search.PrintSearch(StringTerm)) // This should throw a compiler error, but it is not
}
Es scheint, wie wenn ich die Art und die Funktion im selben Paket wie Haupt schreiben, alles funktioniert, wie ich erwarten würde? Wie in, wirft es einen Compilerfehler. Gibt es etwas, das ich an der Zwangspauschale vergessen habe?
Sie brauchen nicht den, den Typ zu konvertieren, wenn es belegbar ist: https://golang.org/ref/spec#Assignability – JimB
Also, was ist der spezifische Anwendungsfall für 'type Something string', wenn Sie die gleiche Typ-Sicherheit erhalten würden, indem Sie' string' selbst verwenden? – thisisnotabus
"xs Typ V und T haben identische zugrunde liegende Typen und mindestens einer von V oder T ist kein benannter Typ." Ich zitiere das Dokument JimB verlinkt. Suchender zugrunde liegende Typ ist Zeichenfolge und Zeichenfolge ist ein unbenannter Typ. – mpm