Golang 獲取命令行攜帶的參數丶文件操作
一.獲取命令行攜帶的參數
1 /* 獲取命令執行攜帶的參數 */ 2 func TestGetCMDParameter() { 3 /* 4 os.Args就是運行時攜帶的參數. 5 os.Args是一個切片 6 第一個是主程序的名稱 7 8 測試: 9 1.編譯 go buil main.go 10 2.運行 ./main -h localhost -p 1234 -P 0000 -u root 11 */ 12 for index, val := range os.Args { 13 index++ 14 fmt.Printf("第%v個參數=%v ", index, val) 15 } 16 17 // 進行過處理的args 18 var user string 19 var host string 20 var passwd string 21 var port int 22 23 flag.IntVar(&port, "p", 6379, "提醒用戶,默認端口為6379.") 24 flag.StringVar(&host, "h", "", "提醒用戶,默認主機名空.") 25 flag.StringVar(&user, "u", "", "提醒用戶,默認用戶為空.") 26 flag.StringVar(&passwd, "P", "", "提醒用戶,默認密碼為空.") 27 28 // 必須調用該方法才會轉換 29 flag.Parse() 30 31 fmt.Printf("\nhost=%v, port=%v, user=%v, passwd=%v \n", host, port, user, passwd) 32 }
二.文件操作
1 func TestFile() { 2 /* 3 使用細節: 4 1.file變量是指針類型 5 2.所有的文件讀寫操作都基于file結構體 6 3. 7 */ 8 // 文件的打開和關閉 9 FileOpenClose := func(filename string) { 10 file, err := os.Open(filename) 11 if err != nil { 12 fmt.Println("open file error ! ", err) 13 return 14 } 15 err = file.Close() 16 if err != nil { 17 fmt.Println("close file error ! ", err) 18 return 19 } 20 } 21 // 讀文件 *Reader 帶緩沖的讀數據.默認緩沖大小為4096個字節(NewReader) 22 FileReadBuf := func(filename string) { 23 file, err := os.Open(filename) 24 if err != nil { 25 fmt.Println("open file error ! ", err) 26 return 27 } 28 defer file.Close() 29 30 reader := bufio.NewReader(file) 31 for { 32 context, err := reader.ReadString('\n') // 讀取到換行符就返回 33 34 if err == io.EOF { 35 fmt.Println("注意這里,帶結尾符的內容:", context) 36 break 37 } 38 fmt.Printf(context) 39 40 } 41 42 } 43 // 一次性將文件內容讀取出來.只適用文件不大的情況 ioutil.ReadFile (好象現在過時了) 44 FileRead := func(filename string) { 45 // 文件的打開和關閉都在ReadFile中處理了 46 bytes, err := ioutil.ReadFile(filename) 47 if err != nil { 48 fmt.Println("open file error ! ", err) 49 return 50 } 51 fmt.Println(string(bytes)) 52 } 53 // 寫文件.以具體模式打開文件 54 FileWriteOpenFile := func(filename string, context []string) { 55 /* 56 const ( 57 // Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified. 58 O_RDONLY int = syscall.O_RDONLY // open the file read-only. 59 O_WRONLY int = syscall.O_WRONLY // open the file write-only. 60 O_RDWR int = syscall.O_RDWR // open the file read-write. 61 // The remaining values may be or'ed in to control behavior. 62 O_APPEND int = syscall.O_APPEND // append data to the file when writing. 63 O_CREATE int = syscall.O_CREAT // create a new file if none exists. 64 O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist. 65 O_SYNC int = syscall.O_SYNC // open for synchronous I/O. 66 O_TRUNC int = syscall.O_TRUNC // truncate regular writable file when opened. 67 ) 68 linux下,第三個參數為文件權限,創建新文件的時候有關 69 */ 70 file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.FileMode(666)) 71 if err != nil { 72 fmt.Println("open file error ! ", err) 73 return 74 } 75 defer file.Close() 76 // 帶緩沖寫文件 77 writer := bufio.NewWriter(file) 78 for _, val := range context { 79 fmt.Println(val) 80 _, err := writer.WriteString(val) 81 if err != nil { 82 fmt.Println("write file error ! ", err) 83 break 84 } 85 86 } 87 // 帶緩沖的writer是先將數據寫入緩存的,所以需要調用Flush將緩沖的數據真正寫入到文件中去 88 writer.Flush() 89 } 90 // 判斷文件是否存在 91 FileExists := func(filename string) (bool, error) { 92 /* 93 os.Stat 返回的FileInfo變量包含了文件的詳細信息 94 type FileInfo interface { 95 Name() string // base name of the file 96 Size() int64 // length in bytes for regular files; system-dependent for others 97 Mode() FileMode // file mode bits 98 ModTime() time.Time // modification time 99 IsDir() bool // abbreviation for Mode().IsDir() 100 Sys() any // underlying data source (can return nil) 101 } 102 */ 103 finfo, err := os.Stat(filename) 104 if err == nil { 105 return true, nil 106 } 107 fmt.Println(finfo) 108 if os.IsNotExist(err) { 109 return false, nil 110 } 111 return false, err 112 } 113 // 復制文件 114 FileCopy := func(desFileName string, srcFileName string) (written int64, err error) { 115 // 1.先獲取src的file對象 116 srcFile, err := os.Open(srcFileName) 117 if err != nil { 118 fmt.Printf("Open '%v' error! %v\n", srcFileName, err) 119 return 120 } 121 defer srcFile.Close() // 記得關閉文件 122 // 2.用src的file對象獲取帶緩沖的Reader,好配合Writer實現Copy 123 reader := bufio.NewReader(srcFile) 124 125 // 3.des的file對象 126 desFile, err := os.OpenFile(desFileName, os.O_CREATE|os.O_WRONLY, 0666) 127 if err != nil { 128 fmt.Printf("Open '%v' error! %v\n", desFileName, err) 129 return 130 } 131 defer desFile.Close() 132 // 4.用des的file對象獲取帶緩沖的Writer,好配合Reader實現Copy 133 writer := bufio.NewWriter(desFile) 134 135 // 5.最終調用Copy. 如果目標文件夾不存在的話會報錯 136 written, err = io.Copy(writer, reader) 137 return 138 } 139 140 filename := "./data.json" 141 FileOpenClose(filename) 142 FileReadBuf(filename) 143 FileRead(filename) 144 FileWriteOpenFile(filename, []string{"1hell"}) 145 if ok, err := FileExists(filename); !ok { 146 if err != nil { 147 fmt.Println("獲取文件信息異常!", err) 148 } else { 149 fmt.Println("文件不存在!") 150 } 151 } 152 if _, err := FileCopy("./test.json", filename); err != nil { 153 fmt.Println("文件Copy錯誤!", err) 154 } 155 }

浙公網安備 33010602011771號