例题
func recv(clnSck net.Conn) {
buf := make([]byte, 1024)
dataLen, err := clnSck.Read(buf)
if err != nil {
fmt.Println(err)
return
}
msg := string(buf[:dataLen])
// 显示接收到的消息
fmt.Println(msg)
}
1.func recv(clnSck net.Conn)
clnSck net.Conn 不甚清楚,net.Conn是一个类型,应该是监听类型,定义了一个clnSck的变量
2. buf := make([]byte, 1024)
but定义成了一个slice切片(定义方式是make,所以每个源数组元素都是0,一共1024个),
长度容量均是1024,可以读取足够长(1024个)字符信息。
其中的byte是指int8 2的8次方个字符(0~255个ASCLL2码)
3. dataLen, err := clnSck.Read(buf)
clnSck.Read()其中类型clnSck定义了Read()方法,
其方法的参数是一个切片slice,返回值包括一个int类型表示字节长度(赋值给了dataLen),
另一个error类型赋值给了err。读取到数据流结尾时(err==io.EOF),break;
4.msg := string(buf[:dataLen])
msg 推断得出是string类型,buf[:dataLen]意思是指
从but切片的0位置一直到dataLen数字的前一个,
注意这里显示的都是数字,0~255的数字中的一个。
而string()将buf切片的元素全部转换成字符格式。
最后,从clnSck得到的信息不包括最后一个字符(一般是回车),从dataLen中可以知道。