您的位置:首页 >Go 中获取文件名:FileInfo.Name() 使用全解析
发布于2026-04-11 阅读(0)
扫一扫,手机访问

ioutil.ReadDir 返回的 FileInfo 切片中,element.Name 是一个方法而非字段,直接打印会输出函数地址;必须加括号调用 element.Name() 才能获取实际文件名字符串。
Go 中如何正确获取文件名字符串:FileInfo.Name() 方法调用详解 — `ioutil.ReadDir` 返回的 `FileInfo` 切片中,`element.Name` 是一个方法而非字段,直接打印会输出函数地址;必须加括号调用 `element.Name()` 才能获取实际文件名字符串。
在 Go 语言中,os.FileInfo 是一个接口类型,其定义如下(精简后):
type FileInfo interface {
Name() string
// ... 其他方法(Size, Mode, ModTime, IsDir 等)
}注意:Name 是一个方法(method),不是结构体字段(field)。因此 element.Name 表示的是该方法的值(即函数指针),而 element.Name() 才是执行该方法并返回 string 类型的文件名。
你原始代码中的问题在于:
fmt.Println(element.Name) // ❌ 错误:打印方法地址(如 0x498abc),所有元素地址相同是因为它们指向同一个方法实现
✅ 正确写法应为:
fmt.Println(element.Name()) // ✅ 正确:调用方法,返回字符串,如 "kepler-10.xml"
完整修正后的程序如下:
package main
import (
"fmt"
"io/ioutil" // ⚠️ 注意:ioutil 在 Go 1.16+ 已弃用,推荐使用 os.ReadDir 或 filepath.Glob
)
func main() {
systems, err := ioutil.ReadDir("./XML")
if err != nil {
fmt.Printf("读取目录失败: %v\n", err)
return
}
fmt.Printf("# of planetary systems\t%d\n", len(systems))
for _, element := range systems {
fmt.Println(element.Name()) // ✅ 调用方法获取文件名
}
}? 重要提醒(兼容性与最佳实践):
// Go 1.16+ 推荐写法(无需 ioutil)
entries, err := os.ReadDir("./XML")
if err != nil {
panic(err)
}
for _, entry := range entries {
fmt.Println(entry.Name()) // DirEntry.Name() 同样是方法,需加 ()
}? 小结:
上一篇:苹果手机主人去世后如何解锁ID
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9