github.com/geraldss/go/src@v0.0.0-20210511222824-ac7d0ebfc235/os/example_test.go (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package os_test
     6  
     7  import (
     8  	"fmt"
     9  	"io/fs"
    10  	"log"
    11  	"os"
    12  	"path/filepath"
    13  	"time"
    14  )
    15  
    16  func ExampleOpenFile() {
    17  	f, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE, 0755)
    18  	if err != nil {
    19  		log.Fatal(err)
    20  	}
    21  	if err := f.Close(); err != nil {
    22  		log.Fatal(err)
    23  	}
    24  }
    25  
    26  func ExampleOpenFile_append() {
    27  	// If the file doesn't exist, create it, or append to the file
    28  	f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    29  	if err != nil {
    30  		log.Fatal(err)
    31  	}
    32  	if _, err := f.Write([]byte("appended some data\n")); err != nil {
    33  		f.Close() // ignore error; Write error takes precedence
    34  		log.Fatal(err)
    35  	}
    36  	if err := f.Close(); err != nil {
    37  		log.Fatal(err)
    38  	}
    39  }
    40  
    41  func ExampleChmod() {
    42  	if err := os.Chmod("some-filename", 0644); err != nil {
    43  		log.Fatal(err)
    44  	}
    45  }
    46  
    47  func ExampleChtimes() {
    48  	mtime := time.Date(2006, time.February, 1, 3, 4, 5, 0, time.UTC)
    49  	atime := time.Date(2007, time.March, 2, 4, 5, 6, 0, time.UTC)
    50  	if err := os.Chtimes("some-filename", atime, mtime); err != nil {
    51  		log.Fatal(err)
    52  	}
    53  }
    54  
    55  func ExampleFileMode() {
    56  	fi, err := os.Lstat("some-filename")
    57  	if err != nil {
    58  		log.Fatal(err)
    59  	}
    60  
    61  	fmt.Printf("permissions: %#o\n", fi.Mode().Perm()) // 0400, 0777, etc.
    62  	switch mode := fi.Mode(); {
    63  	case mode.IsRegular():
    64  		fmt.Println("regular file")
    65  	case mode.IsDir():
    66  		fmt.Println("directory")
    67  	case mode&fs.ModeSymlink != 0:
    68  		fmt.Println("symbolic link")
    69  	case mode&fs.ModeNamedPipe != 0:
    70  		fmt.Println("named pipe")
    71  	}
    72  }
    73  
    74  func ExampleIsNotExist() {
    75  	filename := "a-nonexistent-file"
    76  	if _, err := os.Stat(filename); os.IsNotExist(err) {
    77  		fmt.Println("file does not exist")
    78  	}
    79  	// Output:
    80  	// file does not exist
    81  }
    82  
    83  func ExampleExpand() {
    84  	mapper := func(placeholderName string) string {
    85  		switch placeholderName {
    86  		case "DAY_PART":
    87  			return "morning"
    88  		case "NAME":
    89  			return "Gopher"
    90  		}
    91  
    92  		return ""
    93  	}
    94  
    95  	fmt.Println(os.Expand("Good ${DAY_PART}, $NAME!", mapper))
    96  
    97  	// Output:
    98  	// Good morning, Gopher!
    99  }
   100  
   101  func ExampleExpandEnv() {
   102  	os.Setenv("NAME", "gopher")
   103  	os.Setenv("BURROW", "/usr/gopher")
   104  
   105  	fmt.Println(os.ExpandEnv("$NAME lives in ${BURROW}."))
   106  
   107  	// Output:
   108  	// gopher lives in /usr/gopher.
   109  }
   110  
   111  func ExampleLookupEnv() {
   112  	show := func(key string) {
   113  		val, ok := os.LookupEnv(key)
   114  		if !ok {
   115  			fmt.Printf("%s not set\n", key)
   116  		} else {
   117  			fmt.Printf("%s=%s\n", key, val)
   118  		}
   119  	}
   120  
   121  	os.Setenv("SOME_KEY", "value")
   122  	os.Setenv("EMPTY_KEY", "")
   123  
   124  	show("SOME_KEY")
   125  	show("EMPTY_KEY")
   126  	show("MISSING_KEY")
   127  
   128  	// Output:
   129  	// SOME_KEY=value
   130  	// EMPTY_KEY=
   131  	// MISSING_KEY not set
   132  }
   133  
   134  func ExampleGetenv() {
   135  	os.Setenv("NAME", "gopher")
   136  	os.Setenv("BURROW", "/usr/gopher")
   137  
   138  	fmt.Printf("%s lives in %s.\n", os.Getenv("NAME"), os.Getenv("BURROW"))
   139  
   140  	// Output:
   141  	// gopher lives in /usr/gopher.
   142  }
   143  
   144  func ExampleUnsetenv() {
   145  	os.Setenv("TMPDIR", "/my/tmp")
   146  	defer os.Unsetenv("TMPDIR")
   147  }
   148  
   149  func ExampleReadDir() {
   150  	files, err := os.ReadDir(".")
   151  	if err != nil {
   152  		log.Fatal(err)
   153  	}
   154  
   155  	for _, file := range files {
   156  		fmt.Println(file.Name())
   157  	}
   158  }
   159  
   160  func ExampleMkdirTemp() {
   161  	dir, err := os.MkdirTemp("", "example")
   162  	if err != nil {
   163  		log.Fatal(err)
   164  	}
   165  	defer os.RemoveAll(dir) // clean up
   166  
   167  	file := filepath.Join(dir, "tmpfile")
   168  	if err := os.WriteFile(file, []byte("content"), 0666); err != nil {
   169  		log.Fatal(err)
   170  	}
   171  }
   172  
   173  func ExampleMkdirTemp_suffix() {
   174  	logsDir, err := os.MkdirTemp("", "*-logs")
   175  	if err != nil {
   176  		log.Fatal(err)
   177  	}
   178  	defer os.RemoveAll(logsDir) // clean up
   179  
   180  	// Logs can be cleaned out earlier if needed by searching
   181  	// for all directories whose suffix ends in *-logs.
   182  	globPattern := filepath.Join(os.TempDir(), "*-logs")
   183  	matches, err := filepath.Glob(globPattern)
   184  	if err != nil {
   185  		log.Fatalf("Failed to match %q: %v", globPattern, err)
   186  	}
   187  
   188  	for _, match := range matches {
   189  		if err := os.RemoveAll(match); err != nil {
   190  			log.Printf("Failed to remove %q: %v", match, err)
   191  		}
   192  	}
   193  }
   194  
   195  func ExampleCreateTemp() {
   196  	f, err := os.CreateTemp("", "example")
   197  	if err != nil {
   198  		log.Fatal(err)
   199  	}
   200  	defer os.Remove(f.Name()) // clean up
   201  
   202  	if _, err := f.Write([]byte("content")); err != nil {
   203  		log.Fatal(err)
   204  	}
   205  	if err := f.Close(); err != nil {
   206  		log.Fatal(err)
   207  	}
   208  }
   209  
   210  func ExampleCreateTemp_suffix() {
   211  	f, err := os.CreateTemp("", "example.*.txt")
   212  	if err != nil {
   213  		log.Fatal(err)
   214  	}
   215  	defer os.Remove(f.Name()) // clean up
   216  
   217  	if _, err := f.Write([]byte("content")); err != nil {
   218  		f.Close()
   219  		log.Fatal(err)
   220  	}
   221  	if err := f.Close(); err != nil {
   222  		log.Fatal(err)
   223  	}
   224  }
   225  
   226  func ExampleReadFile() {
   227  	data, err := os.ReadFile("testdata/hello")
   228  	if err != nil {
   229  		log.Fatal(err)
   230  	}
   231  	os.Stdout.Write(data)
   232  
   233  	// Output:
   234  	// Hello, Gophers!
   235  }
   236  
   237  func ExampleWriteFile() {
   238  	err := os.WriteFile("testdata/hello", []byte("Hello, Gophers!"), 0666)
   239  	if err != nil {
   240  		log.Fatal(err)
   241  	}
   242  }