Pythagorean Triple Generator I'm just playing about with Go, and am trying to solve some project euler problems to get used to it.

I've created a generator function for Pythagorean triples, using a channel which returns a set of 3 integers for the sides, like so (HCF implements Euclid's algorithm for finding greatest common divisor or highest common factor in this part of the world):

package main
import "fmt"

func HCF(a, b int) int {
    if a % b == 0 {
        return b
    } else {
        return HCF(b, a%b)
    }
}


func PythagTriple() chan [3]int {

    ch := make(chan [3]int)

    go func() {
        for m := 2; ; m++ {
            for n := m%2 + 1; n &lt; m; n += 2 {
                if HCF(m, n) == 1 {
                    var triple [3]int
                    triple[0] = m*m - n*n
                    triple[1] = 2 * m * n
                    triple[2] = m*m + n*n
                    ch &lt;- triple
                }
            }
        }
    }()

    return ch
}

func main() {

    ch := PythagTriple()
    for i := 0; i &lt; 10; i++ {
        fmt.Println(&lt;- ch)
    }
}


Questions: 


Do I need to do anything with the channel, or will it close and clean up when it goes out of scope?
Is there a better way of creating a quick array than how I've done it?
Is this idiomatic Go, or am I barking up the wrong tree entirely?  I've just started and am not sure if I'm doing it right!


Don't worry too much about efficiency of the algorithm; I'm not too concerned about speed at this point.
Not a Go expert but I think you should be able to define your array of values as you declare it :

triple := [...]int{m*m - n*n, 2 * m * n, m*m + n*n}


Source