您的位置:首页 > 编程语言 > Go语言

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

2013-07-11 09:06 579 查看
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可以共用一个接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: