This is a creation in Article, where the information may have evolved or changed.
The first type:
Func READ (conn *net. Conn) Error { defer Conn. Close () buf: = Make ([]byte, 0, 4096) len: = 0 for { N, err: = conn. Read (Buf[len:]) if n > 0 { len + N } if err! = Nil { If err! = Io. EOF { //error Handler } break } } //Buf[:len] is the content }
The second, more to the force of a method:
Func READ2 (Conn *net. Conn) Error { defer Conn. Close () var buf bytes. Buffer _, Err: = Io. Copy (&BUF, conn) if err! = Nil { //Error handler return err } return nil}
From IO. The implementation of copy actually looks very much like the first implementation. It reads up to 32KB of data from Conn and then calls Buf's Write method to write the data to BUF.
The third type:
Func READ3 (Conn *net. Conn) Error {defer Conn. Close () buf, err = Ioutil. ReadAll (conn) if err ! = Nil {//Error Handler return err } //Use buf ... Return nil}
If you want to have fun, it's better to use the first kind. Know everything