Go言語でスライスをn個ずつに分割する

関連 : python2でリストをn個ずつのサブリストに分割する - brainstorm

package main

import "fmt"

func Chunks(l []int, n int) chan []int {
	ch := make(chan []int)

	go func() {
		for i := 0; i < len(l); i += n {
			from_idx := i
			to_idx := i + n
			if to_idx > len(l) {
				to_idx = len(l)
			}
			ch <- l[from_idx:to_idx]
		}
		close(ch)
	}()
	return ch
}

func main() {
	size := 4
	digits := []int{1, 4, 2, 3, 2, 3, 1, 4, 4, 2, 3, 1, 3, 1, 4, 2}

	for l := range Chunks(digits, size) {
		fmt.Println(l)
	}

}