Go語言學習筆記---通訊
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Go的I/O核心是介面io.Reader和io.Writer
例:(從檔案讀取)無緩衝package mainimport "os"func main(){ buf := make([]byte, 1024) f, _ := os.Open("/etc/passwd") //開啟檔案,os.Open返回一個實現了io.Reader和io.Writer的*os.File; defer f.Close() //確保關閉了f; for { n, _ := f.Read(buf) //一次讀取1024位元組 if n == 0 { //到達檔案末尾 break; } os.Stdout.Write(buf[:n]) //將內容寫入os.Stdout }}輸出結果:/etc/passwd檔案中的內容
如果想要使用緩衝IO,則有bufio包
例:(從檔案讀取)有緩衝package mainimport ( "os" "bufio")func main(){ buf := make([]byte, 1024) f, _ := os.Open("/etc/passwd") defer f.Close() r := bufio.NewReader(f) //轉換f為有緩衝的Reader。NewReader需要一個io.Reader w := bufio.NewWriter(os.Stdout) defer w.Flush() for { n, _ := r.Read(buf) //從Reader讀取,而向Writer寫入,然後向螢幕輸出檔案 if n == 0 { break; } w.Write(buf[0:n]) }}輸出結果:/etc/passwd檔案的內容
命令列參數來自命令列的參數在程式中通過字串sliceos.Args擷取,匯入包os即可.flag包有著精巧的介面,同樣提供瞭解析標識的方法。
執行命令os/exec包有函數可以執行外部命令,這也是在Go中主要的執行命令的方法
例:package mainimport "fmt"import "os/exec"func main(){ cmd := exec.Command("/bin/ls", "-l") buf,_ := cmd.Output() for _, val := range buf { fmt.Printf("%c", val) }}輸出結果:total 4-rw-r--r-- 1 root root 173 Jan 10 15:22 demo.go
網路所有網路相關的類型和函數可以在net包中找到。這其中最重要的函數是Dial。當Dial到遠程系統,這個函數返回Conn介面類型,可以用於發送或接收資訊。函數Dial簡潔的抽象了網路層和傳輸層。因此IPv4或者IPv6,TCP或者UDP可以共用一個介面。