I have the following code:
package main
import \"net\"
import \"fmt\"
import \"bufio\"
func main() {
conn, _ := net.Dial(\"tcp\", \"irc.freenode.net:66
Your program will exit when the main()
function finishes. This is likely to happen before your goroutine has time to run and print its output.
One option would be to have the main goroutine block reading from a channel, and have the goroutine write to the channel when it has completed its work.
You need to add a time delay like time.Sleep(3 * time.Second)
(this waits 3 seconds).
The goroutine closes when the program terminates. I had the exact same problem.
Write data to a channel ch
at the end of goroutine and read data from ch
out of goroutine can make the main function waiting for goroutine print message.
Here is an example:
package main
import "net"
import "fmt"
import "bufio"
func main() {
conn, _ := net.Dial("tcp", "irc.freenode.net:6667")
reader := bufio.NewReader(conn)
ch := make(chan byte, 1)
go func() {
str, err := reader.ReadString('\n')
if err != nil {
// handle it
fmt.Println(err)
}
fmt.Println(str)
ch <- 1
}()
<-ch
}
Another common way to "wait for a goroutines end", is using WaitGroup
:
http://golang.org/pkg/sync/#WaitGroup . You can use waitGroup.Add(1)
for each started goroutine, then use waitGroup.Done()
in each goroutine after it finishes. In the main function you can use waitGroup.Wait()
and this will wait until waitGroup.Done()
has been called for each added goroutine.