這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package mainimport ( "fmt" "io/ioutil" "os" "reflect" "time")func main() { dir, _ := os.Getwd() fmt.Println("dir:", dir) err := os.Chdir("d:/project/test2") dir, _ = os.Getwd() fmt.Println("dir:", dir) //參數不區分大小寫 //不存在環境變數就返回Null 字元串 len(path) = 0 path := os.Getenv("gopath") fmt.Println(path) //返回有效group id egid := os.Getegid() fmt.Println("egid:", egid) //返回有效UID euid := os.Geteuid() fmt.Println("euid:", euid) gid := os.Getgid() fmt.Println("gid:", gid) uid := os.Getuid() fmt.Println("uid:", uid) //err:getgroups: not supported by windows g, err := os.Getgroups() fmt.Println(g, "error", err) pagesize := os.Getpagesize() fmt.Println("pagesize:", pagesize) ppid := os.Getppid() fmt.Println("ppid", ppid) //filemode, err := os.Stat("main.go") //不存在檔案返回GetFileAttributesEx test2: The system cannot find the file specified. filemode, err := os.Stat("main.go") if err == nil { fmt.Println("Filename:", filemode.Name()) fmt.Println("Filesize:", filemode.Size()) fmt.Println("Filemode:", filemode.Mode()) fmt.Println("Modtime:", filemode.ModTime()) fmt.Println("IS_DIR", filemode.IsDir()) fmt.Println("SYS", filemode.Sys()) } else { fmt.Println("os.Stat error", err) } //Chmod is not supported under windows. //在windows變化是這樣子的 -rw-rw-rw- => -r--r--r-- err = os.Chmod("main.go", 7777) fmt.Println("chmod:", err) filemode, err = os.Stat("main.go") fmt.Println("Filemode:", filemode.Mode()) //access time modification time err = os.Chtimes("main.go", time.Now(), time.Now()) fmt.Println("Chtime error:", err) //擷取全部的環境變數 data := os.Environ() for _, val := range data { fmt.Println(val) } fmt.Println("---------end---environ----------------------") mapping := func(s string) string { m := map[string]string{"xx": "sssssssssssss", "yy": "ttttttttttttttt"} return m[s] } datas := "hello $xx blog address $yy" //這個函數感覺還蠻有用處 expandStr := os.Expand(datas, mapping) fmt.Println(expandStr) datas = "GOBIN PATH $gopaTh" //不區分大小寫 fmt.Println(os.ExpandEnv(datas)) hostname, err := os.Hostname() fmt.Println("hostname:", hostname) _, err = os.Open("WWWW.XX") if err != nil { fmt.Println(os.IsNotExist(err)) fmt.Println(err) } f, err := os.Open("WWWW.XX") if err != nil && !os.IsExist(err) { fmt.Println(f, "not exist") } //windows 下兩個都是true fmt.Println(os.IsPathSeparator('/')) fmt.Println(os.IsPathSeparator('\\')) fmt.Println(os.IsPathSeparator('.')) //判斷返回的error 是否是因為許可權的問題 //func IsPermission(err error) bool // not supported by windows err = os.Link("main.go", "newmain.go") if err != nil { fmt.Println(err) } var pathSep string if os.IsPathSeparator('\\') { pathSep = "\\" } else { pathSep = "/" } fmt.Println("PathSeparator:", pathSep) //MkdirAll 建立的是所有下級目錄,如果沒有就建立他 //Mkdir 建立目錄,如果是多級目錄遇到還未建立的就會報錯 err = os.Mkdir(dir+pathSep+"md"+pathSep+"md"+pathSep+"md"+pathSep+"md"+pathSep+"md", os.ModePerm) if err != nil { fmt.Println(os.IsExist(err), err) } err = os.RemoveAll(dir + "md\\md\\md\\md\\md") fmt.Println("removall", err) //rename 實際上通過movefile來實現的 err = os.Rename("main.go", "main1.go") f1, _ := os.Stat("main.go") f2, _ := os.Stat("main1.go") if os.SameFile(f1, f2) { fmt.Println("the sanme") } else { fmt.Println("not same") } //os.Setenv 這個函數是設定環境變數的很簡單 evn := os.Getenv("WD_PATH") fmt.Println("WD_PATH:", evn) err = os.Setenv("WD_PATH", "D:/project") if err != nil { fmt.Println(err) } tmp, _ := ioutil.TempDir(dir, "tmp") fmt.Println(tmp) tmp = os.TempDir() fmt.Println(tmp) cf, err := os.Create("golang.go") defer cf.Close() fmt.Println(err) fmt.Println(reflect.ValueOf(f).Type()) of, err := os.OpenFile("golang.goss", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) defer of.Close() fmt.Println("os.OpenFile:", err) oof, err := os.Open("golang.goss") defer oof.Close() fmt.Println("os.Open file:", oof.Fd()) fmt.Println("os.Open err:", err) oof.Close() r, w, err := os.Pipe() w.Write([]byte("1111")) var buf = make([]byte, 4) r.Read(buf) fmt.Println(buf) w.Write([]byte("2222")) r.Read(buf) // 如果沒有調用w.Write(),r.Read()就會阻塞 fmt.Println("ssss--", buf) b := make([]byte, 100) ff, _ := os.Open("main.go") n, _ := ff.Read(b) fmt.Println(n) fmt.Println(string(b[:n])) //第二個參數,是指,從第幾位開始讀取 n, _ = ff.ReadAt(b, 20) fmt.Println(n) fmt.Println(string(b[:n])) //擷取檔案夾下檔案的列表 dirs, err := os.Open("md") if err != nil { fmt.Println(err) } defer dirs.Close() //參數小於或等去0,表示讀取所有的檔案 //另外一個唯讀取檔案名稱的函數 //fs, err := dirs.Readdirname(0) fs, err := dirs.Readdir(-1) if err == nil { for _, file := range fs { fmt.Println(file.Name()) } } else { fmt.Println("Readdir:", err) } //func (f *File) WriteString(s string) (ret int, err error) //寫入字串函數原型,哪個個函數比較快呢?? //p, _ := os.FindProcess(628) //fmt.Println(p) //p.Kill() attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } //參數也可以這麼寫 `c:\windows\system32\notepad.EXE` 用的是反單引號 p, err := os.StartProcess("c:\\windows\\system32\\notepad.EXE", []string{"c:\\windows\\system32\\notepad.EXE", "d:/1.txt"}, attr) p.Release() time.Sleep(1000000000) p.Signal(os.Kill) os.Exit(10)}