os.Stat reports details about a file, such as its name, size, and whether it is a directory.

file info File info is metadata about a path, separate from the file contents.

File Info

label
file_info.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"os"
)

func main() {
	var label = "report"
	fileName := "go09_file_info.txt"
	content := label + ":ready"

	err := os.WriteFile(fileName, []byte(content), 0644)
	if err != nil {
		fmt.Println("created=", false)
		return
	}
	defer os.Remove(fileName)

	info, err := os.Stat(fileName)
	if err != nil {
		fmt.Println("found=", false)
		return
	}

	fmt.Println("name=", info.Name())
	fmt.Println("size=", info.Size())
	fmt.Println("isDir=", info.IsDir())
}
package main

import (
	"fmt"
	"os"
)

func main() {
	var label = "summary"
	fileName := "go09_file_info.txt"
	content := label + ":ready"

	err := os.WriteFile(fileName, []byte(content), 0644)
	if err != nil {
		fmt.Println("created=", false)
		return
	}
	defer os.Remove(fileName)

	info, err := os.Stat(fileName)
	if err != nil {
		fmt.Println("found=", false)
		return
	}

	fmt.Println("name=", info.Name())
	fmt.Println("size=", info.Size())
	fmt.Println("isDir=", info.IsDir())
}
package main

import (
	"fmt"
	"os"
)

func main() {
	var label = "log"
	fileName := "go09_file_info.txt"
	content := label + ":ready"

	err := os.WriteFile(fileName, []byte(content), 0644)
	if err != nil {
		fmt.Println("created=", false)
		return
	}
	defer os.Remove(fileName)

	info, err := os.Stat(fileName)
	if err != nil {
		fmt.Println("found=", false)
		return
	}

	fmt.Println("name=", info.Name())
	fmt.Println("size=", info.Size())
	fmt.Println("isDir=", info.IsDir())
}
  1. label ← "report", fileName ← "go09_file_info.txt", content ← "report:ready"

    8func main() {9  var label→ "report" = "report" //@label="summary", "log"10  fileName→ "go09_file_info.txt" := "go09_file_info.txt"11  content→ "report:ready" := label"report" + ":ready"1213  err→ <nil> := os.WriteFile(fileName"go09_file_info.txt", []byte(content"report:ready"), 0644)14  if err != nil {15    fmt.Println("created=", false)16    return17  }18  defer os.Remove(fileName"go09_file_info.txt")1920  info→ &os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}, err→ <nil> := os.Stat(fileName"go09_file_info.txt")21  if err != nil {22    fmt.Println("found=", false)23    return24  }2526  fmt.Println("name=", info&os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}.Name())27  fmt.Println("size=", info&os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}.Size())28  fmt.Println("isDir=", info&os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}.IsDir())29}
    outputname= go09_file_info.txt
    size= 12
    isDir= false
  1. label ← "summary", fileName ← "go09_file_info.txt", content ← "summary:ready"

    8func main() {9  var label→ "summary" = "summary"10  fileName→ "go09_file_info.txt" := "go09_file_info.txt"11  content→ "summary:ready" := label"summary" + ":ready"1213  err→ <nil> := os.WriteFile(fileName"go09_file_info.txt", []byte(content"summary:ready"), 0644)14  if err != nil {15    fmt.Println("created=", false)16    return17  }18  defer os.Remove(fileName"go09_file_info.txt")1920  info→ &os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}, err→ <nil> := os.Stat(fileName"go09_file_info.txt")21  if err != nil {22    fmt.Println("found=", false)23    return24  }2526  fmt.Println("name=", info&os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}.Name())27  fmt.Println("size=", info&os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}.Size())28  fmt.Println("isDir=", info&os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}.IsDir())29}
    outputname= go09_file_info.txt
    size= 13
    isDir= false
  1. label ← "log", fileName ← "go09_file_info.txt", content ← "log:ready"

    8func main() {9  var label→ "log" = "log"10  fileName→ "go09_file_info.txt" := "go09_file_info.txt"11  content→ "log:ready" := label"log" + ":ready"1213  err→ <nil> := os.WriteFile(fileName"go09_file_info.txt", []byte(content"log:ready"), 0644)14  if err != nil {15    fmt.Println("created=", false)16    return17  }18  defer os.Remove(fileName"go09_file_info.txt")1920  info→ &os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}, err→ <nil> := os.Stat(fileName"go09_file_info.txt")21  if err != nil {22    fmt.Println("found=", false)23    return24  }2526  fmt.Println("name=", info&os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}.Name())27  fmt.Println("size=", info&os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}.Size())28  fmt.Println("isDir=", info&os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}.IsDir())29}
    outputname= go09_file_info.txt
    size= 9
    isDir= false