os.open()
函式能夠開啟乙個檔案,返回乙個*file
和乙個err
。對得到的檔案例項呼叫close()
方法能夠關閉檔案。
package main
import
("fmt"
"os"
)func
main()
// 關閉檔案
file.
close()
}
為了防止檔案忘記關閉,我們通常使用defer註冊檔案關閉語句。
read方法定義如下:
func
(f *file)
read
(b [
]byte
)(n int
, err error
)
它接收乙個位元組切片,返回讀取的位元組數和可能的具體錯誤,讀到檔案末尾時會返回0
和io.eof
。 例如:
func
main()
defer file.
close()
// 使用read方法讀取資料
var tmp =
make([
]byte
,128
) n, err := file.
read
(tmp)
if err == io.eof
if err !=
nil fmt.
printf
("讀取了%d位元組資料\n"
, n)
fmt.
println
(string
(tmp[
:n])
)}
使用for迴圈讀取檔案中的所有資料。
func
main()
defer file.
close()
// 迴圈讀取檔案
var content [
]byte
var tmp =
make([
]byte
,128
)for
if err !=
nil content =
(content, tmp[
:n]...)}
fmt.
println
(string
(content)
)}
bufio是在file的基礎上封裝了一層api,支援更多的功能。
package main
import
("bufio"
"fmt"
"io"
"os"
)// bufio按行讀取示例
func
main()
defer file.
close()
reader := bufio.
newreader
(file)
for fmt.
println
("檔案讀完了"
)break
}if err !=
nil fmt.
print
(line)
}}
io/iouti
包的readfile
方法能夠讀取完整的檔案,只需要將檔名作為引數傳入。
package main
import
("fmt"
"io/ioutil"
)// ioutil.readfile讀取整個檔案
func
main()
fmt.
println
(string
(content)
)}
os.openfile()
函式能夠以指定模式開啟檔案,從而實現檔案寫入相關功能。
func
openfile
(name string
, flag int
, perm filemode)
(*file,
error
)
其中:
name
:要開啟的檔名flag
:開啟檔案的模式。 模式有以下幾種:
模式含義
os.o_wronly
只寫os.o_create
建立檔案
os.o_rdonly
唯讀os.o_rdwr
讀寫os.o_trunc
清空追加
perm
:檔案許可權,乙個八進位制數。r(讀)04,w(寫)02,x(執行)01。
func
main()
defer file.
close()
str :=
"hello 掛榜山"
file.
write([
]byte
(str)
)//寫入位元組切片資料
file.
writestring
("hello 小六"
)//直接寫入字串資料
}
func
main()
defer file.
close()
writer := bufio.
newwriter
(file)
for i :=
0; i <
10; i++
writer.
flush()
//將快取中的內容寫入檔案
}
func
main()
}
借助io.copy()
實現乙個拷貝檔案函式。
// copyfile 拷貝檔案函式
func
copyfile
(dstname, srcname string
)(written int64
, err error
)defer src.
close()
// 以寫|建立的方式開啟目標檔案
dst, err := os.
openfile
(dstname, os.o_wronly|os.o_create,
0644
)if err !=
nildefer dst.
close()
return io.
copy
(dst, src)
//呼叫io.copy()拷貝內容
}func
main()
fmt.
println
("copy done!"
)}
使用檔案操作相關知識,模擬實現linux平台cat
命令的功能。
package main
import
("bufio"
"flag"
"fmt"
"io"
"os"
)// cat命令實現
func
cat(r *bufio.reader)
fmt.
fprintf
(os.stdout,
"%s"
, buf)}}
func
main()
// 依次讀取每個指定檔案的內容並列印到終端
for i :=
0; i < flag.
narg()
; i++
cat(bufio.
newreader
(f))
}}
返回主目錄
說明:文章參考於李文周老師筆記(看詳細內容請檢視源筆記)
2 6 Go語言整型(整數型別)
go語言的數值型別分為以下幾種 整數 浮點數 複數,其中每一種都包含了不同大小的數值型別,例如有符號整數包含 int8 int16 int32 int64 等,每種數值型別都決定了對應的大小範圍和是否支援正負符號。本節我們主要介紹一下整數型別。go語言同時提供了有符號和無符號的整數型別,其中包括 i...
Go語言標準庫之flag
go語言內建的flag包實現了命令列引數的解析,flag包使得開發命令列工具更為簡單。如果你只是簡單的想要獲取命令列引數,可以像下面的 示例一樣使用os.args來獲取命令列引數。package main import fmt os os.args demo func main 將上面的 執行go ...
Go語言標準庫之strconv
go語言中strconv包實現了基本資料型別和其字串表示的相互轉換。更多函式請檢視官方文件。這一組函式是我們平時程式設計中用的最多的。將字串型別的整數轉換為int型別。func atoi s string i int,err error 如果傳入的字串引數無法轉換為int型別,就會返回錯誤。s1 1...