2012-10-23 9 views

risposta

36

Modifica: Go è stato spostato. Si prega di vedere Keith's answer.

Utilizzare path/filepath.Ext per ottenere l'estensione. È quindi possibile utilizzare la lunghezza dell'estensione per recuperare la sottostringa meno l'estensione.

var filename = "hello.blah" 
var extension = filepath.Ext(filename) 
var name = filename[0:len(filename)-len(extension)] 

In alternativa è possibile utilizzare strings.LastIndex per trovare l'ultimo punto (.), Ma questo può essere un po 'più fragile che non ci saranno casi limite (ad esempio, senza estensione) che filepath.Ext maniglie che potrebbe essere necessario per codificare esplicitamente, o se Go doveva essere eseguito su un O/S teorico che utilizza un delimitatore di estensione diverso dal periodo.

+1

Grazie, risolvere il mio problema ora. – Coder

+0

stringhe.TrimSuffix, sotto, fa lo stesso array matematica/indici :) – rogerdpack

+2

@rogerdpack, sì la gente dovrebbe usare la risposta di Keith. 'TrimSuffix' non esisteva in Go quando ho scritto questa risposta (è stato [aggiunto in Go 1.1 a febbraio 2013] (https://code.google.com/p/go/source/diff?spec=svnc7353c98694b135ba941cea93b01e5c0e6a4dd55&old=c0f7c53dcfce43f4921cce7bb2ef7800c752bf4c&r = c7353c98694b135ba941cea93b01e5c0e6a4dd55 & format = unidiff & path =% 2Fsrc% 2Fpkg% 2Fstrings% 2Fstrings.go)). –

0

In questo modo funziona troppo:

var filename = "hello.blah" 
var extension = filepath.Ext(filename) 
var name = TrimRight(filename, extension) 

ma forse il metodo di Paul Ruane è più efficiente?

+3

Penso che qui TrimRight rimuova un "cutset" (cioè set di caratteri) dalla fine, che potrebbe non essere quello che vuoi qui: http://golang.org/pkg/strings/#TrimRight (vedi anche TrimSuffix) – rogerdpack

108

Prova:

basename := "hello.blah" 
name := strings.TrimSuffix(basename, filepath.Ext(basename)) 

TrimSuffix sostanzialmente dice di togliere la stringa finale che è l'estensione con un punto.

TrimSuffix docu here

+0

Spiega perché questo funziona –

+2

Mi piace questo, sembra più leggibile rispetto alla matematica dell'array – rogerdpack

+1

Nota che 'filepath.Ext (" test.tar.gz ")' restituisce '.gz' che può o non può essere quello che vuoi. –