// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package os_test import ( "errors" "fmt" "io/fs" "log" "os" "path/filepath" "time" ) func ExampleOpenFile() { f, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE, 0755) if err != nil { log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } } func ExampleOpenFile_append() { // If the file doesn't exist, create it, or append to the file f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Fatal(err) } if _, err := f.Write([]byte("appended some data\n")); err != nil { f.Close() // ignore error; Write error takes precedence log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } } func ExampleChmod() { if err := os.Chmod("some-filename", 0644); err != nil { log.Fatal(err) } } func ExampleChtimes() { mtime := time.Date(2006, time.February, 1, 3, 4, 5, 0, time.UTC) atime := time.Date(2007, time.March, 2, 4, 5, 6, 0, time.UTC) if err := os.Chtimes("some-filename", atime, mtime); err != nil { log.Fatal(err) } } func ExampleFileMode() { fi, err := os.Lstat("some-filename") if err != nil { log.Fatal(err) } fmt.Printf("permissions: %#o\n", fi.Mode().Perm()) // 0400, 0777, etc. switch mode := fi.Mode(); { case mode.IsRegular(): fmt.Println("regular file") case mode.IsDir(): fmt.Println("directory") case mode&fs.ModeSymlink != 0: fmt.Println("symbolic link") case mode&fs.ModeNamedPipe != 0: fmt.Println("named pipe") } } func ExampleErrNotExist() { filename := "a-nonexistent-file" if _, err := os.Stat(filename); errors.Is(err, fs.ErrNotExist) { fmt.Println("file does not exist") } // Output: // file does not exist } func ExampleExpand() { mapper := func(placeholderName string) string { switch placeholderName { case "DAY_PART": return "morning" case "NAME": return "Gopher" } return "" } fmt.Println(os.Expand("Good ${DAY_PART}, $NAME!", mapper)) // Output: // Good morning, Gopher! } func ExampleExpandEnv() { os.Setenv("NAME", "gopher") os.Setenv("BURROW", "/usr/gopher") fmt.Println(os.ExpandEnv("$NAME lives in ${BURROW}.")) // Output: // gopher lives in /usr/gopher. } func ExampleLookupEnv() { show := func(key string) { val, ok := os.LookupEnv(key) if !ok { fmt.Printf("%s not set\n", key) } else { fmt.Printf("%s=%s\n", key, val) } } os.Setenv("SOME_KEY", "value") os.Setenv("EMPTY_KEY", "") show("SOME_KEY") show("EMPTY_KEY") show("MISSING_KEY") // Output: // SOME_KEY=value // EMPTY_KEY= // MISSING_KEY not set } func ExampleGetenv() { os.Setenv("NAME", "gopher") os.Setenv("BURROW", "/usr/gopher") fmt.Printf("%s lives in %s.\n", os.Getenv("NAME"), os.Getenv("BURROW")) // Output: // gopher lives in /usr/gopher. } func ExampleUnsetenv() { os.Setenv("TMPDIR", "/my/tmp") defer os.Unsetenv("TMPDIR") } func ExampleReadDir() { files, err := os.ReadDir(".") if err != nil { log.Fatal(err) } for _, file := range files { fmt.Println(file.Name()) } } func ExampleMkdirTemp() { dir, err := os.MkdirTemp("", "example") if err != nil { log.Fatal(err) } defer os.RemoveAll(dir) // clean up file := filepath.Join(dir, "tmpfile") if err := os.WriteFile(file, []byte("content"), 0666); err != nil { log.Fatal(err) } } func ExampleMkdirTemp_suffix() { logsDir, err := os.MkdirTemp("", "*-logs") if err != nil { log.Fatal(err) } defer os.RemoveAll(logsDir) // clean up // Logs can be cleaned out earlier if needed by searching // for all directories whose suffix ends in *-logs. globPattern := filepath.Join(os.TempDir(), "*-logs") matches, err := filepath.Glob(globPattern) if err != nil { log.Fatalf("Failed to match %q: %v", globPattern, err) } for _, match := range matches { if err := os.RemoveAll(match); err != nil { log.Printf("Failed to remove %q: %v", match, err) } } } func ExampleCreateTemp() { f, err := os.CreateTemp("", "example") if err != nil { log.Fatal(err) } defer os.Remove(f.Name()) // clean up if _, err := f.Write([]byte("content")); err != nil { log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } } func ExampleCreateTemp_suffix() { f, err := os.CreateTemp("", "example.*.txt") if err != nil { log.Fatal(err) } defer os.Remove(f.Name()) // clean up if _, err := f.Write([]byte("content")); err != nil { f.Close() log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } } func ExampleReadFile() { data, err := os.ReadFile("testdata/hello") if err != nil { log.Fatal(err) } os.Stdout.Write(data) // Output: // Hello, Gophers! } func ExampleWriteFile() { err := os.WriteFile("testdata/hello", []byte("Hello, Gophers!"), 0666) if err != nil { log.Fatal(err) } }