Goでイマイチしっくりきていないところ

Genericがないとか、継承がないとかは言語特性なので気にならないけど、 Goルーチンのチャネルを関数に与えたときに、 関数の引数で与えたチャネルが出力引数になるというところがScala使っているとどうしてもしっくりこない。

package main

import "fmt"

func goroutine(numbers []int, c chan int) {
    sum := 0
    for _, num := range numbers {
        sum += num
    }
    c <- sum
    close(c)
}

func main() {
    c := make(chan int)
    numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    go goroutine(numbers, c)

    for result := range c {
        fmt.Println(result)
    }
}

これも言語特性なので、納得しよう。