Welche Methode ist am besten (am idiomatischsten) für das Testen von nicht leeren Zeichenketten (in Go)?
if len(mystring) > 0 { }
Oder:
if mystring != "" { }
Oder etwas anderes?
Welche Methode ist am besten (am idiomatischsten) für das Testen von nicht leeren Zeichenketten (in Go)?
if len(mystring) > 0 { }
Oder:
if mystring != "" { }
Oder etwas anderes?
Beide Stile werden innerhalb der Standardbibliotheken von Go verwendet.
if len(s) > 0 { ... }
kann im strconv
Paket gefunden werden: http://golang.org/src/pkg/strconv/atoi.go
if s != "" { ... }
kann im encoding/json
Paket gefunden werden: http://golang.org/src/pkg/encoding/json/encode.go
Beide sind idiomatisch und klar genug. Es ist eher eine Frage des persönlichen Geschmacks und der Klarheit.
Russ Cox schreibt in einem golang-nuts Thread:
Derjenige, der den Code klar macht.
Wenn ich vorhabe, ein Element x anzuschauen, schreibe ich normalerweise
len(s) > x, auch für x == 0, aber wenn es mir um
"ist es dieser spezifische String" geht, tendiere ich dazu s == "".Es ist vernünftig anzunehmen, dass ein ausgereifter Compiler
len(s) == 0 und s == "" in denselben, effizienten Code kompiliert.
...Mache den Code klar.
Wie in Timmmms Antwort hervorgehoben wurde, generiert der Go-Compiler in beiden Fällen identischen Code.
Das Überprüfen der Länge ist eine gute Antwort, aber Sie könnten auch auf einen "leeren" String achten, der nur Leerzeichen enthält. Nicht "technisch" leer, aber wenn Sie darauf achten möchten:
package main
import (
"fmt"
"strings"
)
func main() {
stringOne := "merpflakes"
stringTwo := " "
stringThree := ""
if len(strings.TrimSpace(stringOne)) == 0 {
fmt.Println("String ist leer!")
}
if len(strings.TrimSpace(stringTwo)) == 0 {
fmt.Println("String zwei ist leer!")
}
if len(stringTwo) == 0 {
fmt.Println("String zwei ist immer noch leer!")
}
if len(strings.TrimSpace(stringThree)) == 0 {
fmt.Println("String drei ist leer!")
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.