2012-10-23 27 views

Trả lời

36

Chỉnh sửa: Đi đã chuyển sang. Vui lòng xem Keith's answer.

Sử dụng path/filepath.Ext để nhận tiện ích. Sau đó, bạn có thể sử dụng độ dài của tiện ích mở rộng để truy xuất chuỗi con trừ đi phần mở rộng.

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

Hoặc bạn có thể sử dụng strings.LastIndex để tìm giai đoạn cuối cùng (.) Nhưng điều này có thể nhiều hơn một chút mong manh trong đó sẽ có trường hợp cạnh (ví dụ như không có phần mở rộng) mà filepath.Ext xử lý mà bạn có thể cần phải viết mã cho một cách rõ ràng, hoặc nếu Go được chạy trên một O/S lý thuyết sử dụng dấu tách mở rộng khác với khoảng thời gian.

+1

Cảm ơn, giải quyết sự cố của tôi ngay bây giờ. – Coder

+0

strings.TrimSuffix, bên dưới, không cùng một mảng toán/chỉ số :) – rogerdpack

+2

@rogerdpack, có người nên sử dụng câu trả lời của Keith. 'TrimSuffix' không tồn tại trong Go khi tôi viết câu trả lời này (nó đã được thêm vào trong Go 1.1 vào tháng 2 năm 2013] (https://code.google.com/p/go/source/diff?spec=svnc7353c98694b135ba941cea93b01e5c0e6a4dd55&old=c0f7c53dcfce43f4921cce7bb2ef7800c752bf4c&r = c7353c98694b135ba941cea93b01e5c0e6a4dd55 & format = unidiff & path =% 2Fsrc% 2Fpkg% 2Fstrings% 2Fstrings.go)). –

0

cách này hoạt động quá:

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

nhưng có lẽ phương pháp Paul Ruane là hiệu quả hơn?

+3

Tôi nghĩ TrimRight ở đây loại bỏ một "cutset" (tức là ký tự đặt) từ cuối, có thể không phải là những gì bạn muốn ở đây: http://golang.org/pkg/strings/#TrimRight (xem thêm TrimSuffix) – rogerdpack

108

Hãy thử:

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

TrimSuffix cơ bản cho nó cởi chuỗi dấu đó là phần mở rộng với một dấu chấm.

TrimSuffix docu here

+0

Giải thích lý do tại sao những công việc này. –

+2

Tôi thích cái này, có vẻ dễ đọc hơn làm toán mảng – rogerdpack

+1

Lưu ý rằng 'filepath.Ext (" test.tar.gz ")' trả về '.gz' có thể hoặc không thể là thứ bạn muốn. –

Các vấn đề liên quan