Go语言学习笔记---通讯

来源:互联网 发布:淘宝网店注册 编辑:程序博客网 时间:2024/06/06 01:08
Go的I/O核心是接口io.Reader和io.Writer

例:(从文件读取)无缓冲
package main
import "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 main
import (
    "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 main
import "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可以共用一个接口。






原创粉丝点击