Skip to content
lenville edited this page Feb 3, 2015 · 2 revisions

终于翻越了 接口 和 并发 两座大山! 非常爽 那我们一起来啃最后一座 通讯 的大山吧

Go 的 I/O 核心是接口 io.Reader 和 io.Writter 这有一个示例

// 先分配缓冲区
buf := make([]byte, 1024)
//再读取文件
f, _ := os.Open("/etc/passwd")
//读取输出
for {
  // 读取一行到缓冲区, 返回本行长度
  n, _ := f.Read(buf)
  // EOF标志: 本行没内容
  if n == 0 {
    break
  }
  // 如果未到文件尾, 输出到 Stdout
  os.Stdout.Write(buf[:n]) 
}

如果需要用到缓冲区整块读写, 可以用到 bufio 包, 示例

建立文件夹的方法, 像极了脚本语言的样子, Go就是这么炫酷

if _, e := os.Stat("name"); e != nil {
  os.Mkdir("name", 0755)
} else {
  // error
}

来自命令行的参数在程序中通过字符串 slice os.Args 获取, 导入包 os 即可

for i,l := 0,len(os.Args); i<l; i++ {
  fmt.Println(os.Args[i])
}
// Args[0] 打出的好像是当前执行程序的路径

然后, 怎么执行外部的命令呢, 大家都有 exec go 怎么能没有呢, 通过定义一个有着数个方法的 *exec.Cmd 结构来使用 内容有点儿多, 看 exec包 描述吧 也可以运行一下这个程序玩儿玩儿 列举当前父进程的所有子进程