The code below is from Jan Newmarch's book about network programming in Go. In most of the Go code that I've seen (which is very little, as I'm a newbie, you don't (in a function call) pass a type with a parameter. However, in the code below, you see this line
conn.Write([]byte(daytime))
Why is it necessary to include []byte
in this function call?
func main() {
service := ":1200"
tcpAddr, err := net.ResolveTCPAddr("ip4", service)
checkError(err)
listener, err := net.ListenTCP("tcp", tcpAddr)
checkError(err)
for {
conn, err := listener.Accept()
if err != nil {
continue
}
daytime := time.Now().String()
conn.Write([]byte(daytime))
Conn.Write()
expects the value as a byte slice. Since daytime
is of type string you have to convert it.
You could rewrite the above as:
daytime := []byte(time.Now().String())
conn.Write(daytime)
Or, as @fabrizioM writes, you could use the formatted writer which would convert it:
fmt.Fprintf(conn, daytime)
Another way to do it is to use
fmt.Fprintf(conn, daytime)
Because the data being transferred between server and client is byte.
The daytime in your case is obviously string format.
So you have to convert it into byte by using []byte(daytime).
Either way, you could import "bufio" to create a NewWriter for each client, and the NewWriter
will have the methods WriteString(""). At this moment, you could directly pass your daytime
as a parameter~