只在此山中,雲深不知處
Writing & Reading Files
- Go可以讓我們讀寫檔案資料
-
Writing to a file......。
- 因為要操作檔案建立,記得import "os",使用os.Create(filename)來建立檔案。
- defer file.Close()用來確保完成後檔案關閉。
- 使用file.WriteString(string)來將字串寫入檔案,會傳回檔案資料長度,使用file.Name()可得到檔案名。
- 也可以使用file.Write(b),參數須為byte,所以需先將字串改為b := []byte("Here something is written into the file\n......")。
- 也可以直接使用ioutil內的WriteFile(),若寫入檔案不存在則自動建立,第二的參數是byte。這方法不適用於大檔案。
- 也可以使用bufio.NewWriter(file)來寫入檔案,記得最後要Flush()。此處使用os.OpenFile()來開啟檔案,因為要新建檔案,使用參數os.O_CREATE。
- 上例中若是檔案已存在,且想要append新資料,則參數改為os.O_APPEND。若是使用os.O_WRONLY,則僅能寫入,且會覆蓋在檔案前端。若是使用os.O_RDWR則能讀寫。
-
Reading file......。
- 此處讀檔時需使用package "io/ioutil",所以要記得import "io/ioutil"。
- 首先還是要先開啟檔案,使用os.Open(filename)。
- 接下來使用ioutil.ReadFile(filename)來讀取檔案內容,最後使用fmt.Printf("%s", data)將其印出。
- 原則上使用io/ioutil不需先行開啟,直接讀取即可。
- 使用bufio.NewReader()建立Reader,再使用ReadString()讀取一行內容(或使用n, err := r.Peek(10)讀取10bytes內容,使用fmt.Printf("%s", n)印出)。
- 或是使用ReadSlice('\n'), ReadBytes('\n')讀取一行。
- 使用bufio.NewScanner(file)來讀取檔案,使用Scan()來一行一行讀取資料。
time
- 使用package time可以取得或計算時間
-
使用前必須先import time這個package。
- p := fmt.Println是為了減少打字,之後使用p()即等於fmt.Println()。
- time.Now()傳回目前時間。
- time.Date()可以設定一個時間,使用time.Local取得目前時區(time.UTC為標準時間)。
- p(time1.Before(time2))用來判斷設定之時間是否早於另一時間。
- 使用time1.Sub(time2)來求得兩時間之差。
- 使用time1.Add(diff)來加上(使用-diff來減去)一段時間。
strings
- 關於字串的操作
-
: 需要import package strings。