在 Go 语言中,获取文件的后缀名(扩展名)是一个常见的任务,尤其是在处理文件上传、路径解析或文件类型检查时。Go 的标准库 path/filepath 提供了简单高效的方法来实现这一功能。

使用 filepath.Ext 函数

Go 语言内置的 filepath.Ext 函数是获取文件后缀名最直接的方式。它接受一个文件路径字符串作为参数,并返回文件的扩展名,包括点号(.)。如果文件没有扩展名,则返回空字符串。

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    filename := "example.txt"
    ext := filepath.Ext(filename)
    fmt.Println("扩展名:", ext) // 输出: .txt
}

注意filepath.Ext 函数只返回最后一个点号之后的部分,例如 file.tar.gz 会返回 .gz,而不是 .tar.gz。如果需要处理多部分扩展名,可能需要自定义逻辑。

处理无扩展名的情况

在实际应用中,文件可能没有扩展名,这时 filepath.Ext 会返回空字符串。你可以通过检查返回值来处理这种情况。

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    filename := "README"
    ext := filepath.Ext(filename)
    if ext == "" {
        fmt.Println("文件没有扩展名")
    } else {
        fmt.Println("扩展名:", ext)
    }
}

自定义获取扩展名函数

如果你需要更灵活的处理,比如忽略点号或处理多部分扩展名,可以编写自定义函数。下面是一个示例,它返回不带点号的扩展名。

package main

import (
    "fmt"
    "path/filepath"
    "strings"
)

func getExtension(filename string) string {
    ext := filepath.Ext(filename)
    // 移除点号
    return strings.TrimPrefix(ext, ".")
}

func main() {
    filename := "document.pdf"
    ext := getExtension(filename)
    fmt.Println("扩展名:", ext) // 输出: pdf
}

警告:自定义函数时,注意处理边缘情况,如空字符串或包含多个点号的文件名,以避免错误。