Je suis fractionnement noms de fichiers dans Go pour obtenir l'extension de fichier (par exemple import ("strings") ; strings.Split("example.txt", ".")
). Pour cette raison, je voudrais retourner le dernier élément de la tranche retournée par la division, c'est-à-dire.
pour strings.Split ("ex.txt", "."), je veux txt
This question suggère que faire
strings.Split("ex.txt", ".")[len(strings.Split("ex.txt", ".")) - 1]
est le seul moyen d'y arriver. Autrement dit, il n'y a pas de -1
comme en Python. Cela me semble très inutile, car je pense que nous effectuons deux fois la même opération de division.
Split
dans une variable, ou tout simplement de faire ce qui précède?Je vous remercie!
Vous devez affecter les résultats du fractionnement à une variable, au lieu de l'appeler deux fois.
ss := strings.Split(msg, ".")
s := ss[len(ss)-1]
(Notez que cela vous permet (ou peut-être vous oblige) de traiter le cas où ss
est vide ou autre chose inattendu de manière explicite, avant de l'indexer.)
Si vous faites cela encore et encore et que cela vous offense d'avoir à utiliser deux lignes (ou deux lignes plus la gestion des erreurs) au lieu d'une, vous pouvez la résumer assez facilement dans une fonction:
func lastString(ss []string) string {
return ss[len(s)-1]
}
s1 := lastString(strings.Split("example.txt", "."))
s2 := lastString(strings.Split("example.jpg", "."))
Après tout, passer le résultat d'une fonction en tant qu'argument a essentiellement le même effet que de le lier à une variable.
strings.LastIndex
rend cela assez soigné:
s := "Hello,Stack,Overflow"
last := s[strings.LastIndex(s, ",")+1:]
fmt.Println(last)
renvoie "Overflow". Si la chaîne de recherche n'est pas trouvée, elle renvoie la chaîne entière, ce qui est logique.
Aire de jeux ici
J'utiliserais le package filepath plutôt que de l'analyser vous-même:
import "path/filepath"
s := "file.ext"
ext := filepath.Ext(s)
if len(ext) != 0 {
fmt.Printf("ext = %s\n", ext[1:])
} else {
fmt.Printf("no ext\n")
}
Cela fonctionnera avec un chemin d'accès complet ainsi qu'avec un nom de fichier.