golang学习笔记(三)
其他
2020-05-14 15:28:51
阅读次数: 0
文件IO
- io包
- pipe 该方法返回一个PipeReader和一个PipeWriter指针
type pipe struct {
wrMu sync.Mutex // 写时锁
wrCh chan []byte // 数据存储单元
rdCh chan int // 数据存储长度
...
}
type PipeWriter struct {
p *pipe // 共享pipe
}
type PipeReader struct {
p *pipe // 共享pipe
}
...
pipe管道通过内存进行同步控制,是一个无缓冲管道,比如import (
"io"
)
func main() {
r, w := io.Pipe()
buf := make([]byte, 128)
go func() {
println("done")
r.Read(buf)
println(string(buf))
}()
go w.Write([]byte("hello"))
for true {
//因为如果主函数结束,所有goroutine会被终止
//通过阻塞主函数保证其他goroutine执行完成
}
}
- io/ioutil包
- ReadAll 从一个reader中读取所有数据,返回读到的字节 slice
func ReadAll(r io.Reader) ([]byte, error)
- ReadDir 读取一个目录,返回目录中的文件信息数组 []os.FileInfo
func ReadDir(dirname string) ([]os.FileInfo, error)
- ReadFile 读一个文件,返回文件内容(字节slice)
func ReadFile(filename string) ([]byte, error)
- WriteFile 将字节slice写入文件
func WriteFile(filename string, data []byte, perm os.FileMode) error
- TempDir 创建指定前缀名的临时目录,返回创建目录的路径
func TempDir(dir, prefix string) (name string, err error)
- TempFile 创建指定前缀名的临时文件,返回创建后的文件指针
func TempFile(dir, prefix string) (f *os.File, err error)
网络通信
- Tcp
- client
import (
"net"
)
func main() {
conn, _ := net.Dial("tcp", "127.0.0.1:65535")
defer conn.Close()
conn.Write([]byte("echo data to server ,then to client!!!"))
buf := make([]byte, 1024)
conn.Read(buf)
println("receive : ", string(buf))
}
import (
"net"
)
func main() {
l, _ := net.Listen("tcp", "127.0.0.1:65535")
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
return
}
//处理tcp请求
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
buf := make([]byte, 1024)
conn.Read(buf)
println("recieve : ", string(buf))
conn.Write([]byte("hello from server"))
}
- Udp
- client
import (
"net"
)
func main() {
//第二个参数是本地绑定的addr,不指定由系统随机分配
socket, _ := net.DialUDP("udp4", nil, &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 23452,
})
defer socket.Close()
senddata := []byte("hello from udpClient!")
socket.Write(senddata)
// 接收数据
data := make([]byte, 4096)
socket.ReadFromUDP(data)
println("recieve : ", string(data))
}
- server
import (
"net"
)
func main() {
socket, _ := net.ListenUDP("udp4", &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 23452,
})
defer socket.Close()
for {
// 读取数据
data := make([]byte, 1028)
_, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
continue
}
println("recieve : ", string(data))
// 发送数据
senddata := []byte("hello from udpServer!")
_, err = socket.WriteToUDP(senddata, remoteAddr)
if err != nil {
return
}
}
}
转载自blog.csdn.net/weixin_44627989/article/details/105989741