Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between = and <- in golang

Tags:

go

func worker(id int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        fmt.Println("worker", id, "processing job", j)
        time.Sleep(time.Second)
        results <- j * 2
    }
}

func main() {
    t := time.Now()
    fmt.Println(t)
    jobs := make(chan int, 100)
    results := make(chan int, 100)
    for w := 1; w <= 4; w++ {
        go worker(w, jobs, results)
    }
    for j := 1; j <= 20; j++ {
        jobs <- j
    }
    close(jobs)
    for a := 1; a <= 20; a++ {
        <-results
    }

    t = time.Now()
    fmt.Println(t)
}

I am confused of the "<-" and I can not find any related documents about "<-". So what is the difference between <- and =?? why I can not use = here?

like image 838
Wyatt Avatar asked Oct 25 '15 01:10

Wyatt


Video Answer


2 Answers

The = operator deals with variable assignment as in most languages. It expresses the idea of wanting to update the value that an identifier references. The <- operator represents the idea of passing a value from a channel to a reference. If you think of the channel as a queue using an assignment operator = would assign the reference to the queue to the target variable. The receive operator <- is equivalent to dequeuing from the queue and assigning the value of the item to the target variable.

You cannot use the operators interchangeably because of a type mismatch. Please note the links to the Go specification which speak at greater length to the operators.

like image 200
Ben Campbell Avatar answered Sep 21 '22 02:09

Ben Campbell


  • "=" is assignment,just like other language.
  • <- is a operator only work with channel,it means put or get a message from a channel.
  • channel is an important concept in go,especially in concurrent programming.you can try this Channel TourPage to see its using scene.
like image 26
Kaicui Avatar answered Sep 20 '22 02:09

Kaicui