Leahcim
Leahcim

Reputation: 42049

passing type with parameter in function call

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))

Upvotes: 1

Views: 81

Answers (3)

zengabor
zengabor

Reputation: 2023

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)

Upvotes: 3

JustSt
JustSt

Reputation: 33

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~

Upvotes: 0

fabmilo
fabmilo

Reputation: 48330

Another way to do it is to use

fmt.Fprintf(conn, daytime)

Upvotes: 2

Related Questions