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

Mervyn1205 · · 1310 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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可以共用一个接口。







有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:Mervyn1205

查看原文:Go语言学习笔记---通讯

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1310 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传