2012-10-23 30 views

cevap

36

Düzenleme: Go taşındı. Lütfen Keith's answer'a bakın.

Uzantıyı almak için path/filepath.Ext kullanın. Daha sonra, uzantıyı ekleyerek alt dizeyi almak için uzantının uzunluğunu kullanabilirsiniz.

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

Alternatif (.) Son dönem bulmak için strings.LastIndex kullanabilirsiniz ama kenar vakalar filepath.Ext için kod gerekebileceğini işleme (örneğin hiçbir uzantı) olacak bu biraz daha kırılgan olduğunu olabilir Açıkça, ya da Go dönem dışında bir uzatma sınırlayıcı kullanan teorik bir O/S üzerinde çalıştırılacaktı.

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

ama belki Paul Ruane yöntemi daha etkilidir:

+1

Teşekkürler, sorunumu şimdi çöz. – Coder

+0

strings.TrimSuffix, altta, aynı dizi matematik/indisleri yapar :) – rogerdpack

+2

@rogerdpack, evet insanlar Keith'in cevabını kullanmalıdır. Bu cevabı yazdığımda Go (GoS) 'da mevcut değil (https://code.google.com/p/go/source/diff?spec=svnc7353c98694b135ba941cea93b01e5c0e6a4dd55&old=c0f7c53dcfce43f4921cce7bb2ef7800c752bf4c&r = c7353c98694b135ba941cea93b01e5c0e6a4dd55 ve biçimi = unidiff ve yol =% 2Fsrc% 2Fpkg% 2Fstrings% 2Fstrings.go)). –

0

Bu yol çok çalışıyor?

+3

Bence TrimRight burada bir "cutset" (yani karakter kümesi) 'yi buradan kaldırır, burada istediğinizi olmayabilir: http://golang.org/pkg/strings/#TrimRight (ayrıca bkz. TrimSuffix) – rogerdpack

108

Dene:

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

TrimSuffix temelde bir nokta ile uzantısıdır sondaki dize kapalı şerit onu söyler.

TrimSuffix docu here

+0

Nedenini açıklayın bu çalışıyor. –

+2

Bunu beğendim, dizi matematiği yapmaktan daha okunabilir görünüyor – rogerdpack

+1

Not 'filepath.Ext (" test.tar.gz ")' döndürür '.gz' istediğiniz ya da olmayabilir. –

İlgili konular