Go 面试题:按要求填充 4 个文件

今天看到一道面试题,不难,抽了点时间做出来了。

问题

有四个 goroutine,分别输出1、2、3、4。要求从这些 goroutine 获取数据向四个文件输出内容,分别为:

  • 1 2 3 4 1 2…
  • 2 3 4 1 2 3…
  • 3 4 1 2 3 4…
  • 4 1 2 3 4 1…

思路

package main

import "fmt"

func main() {
	chs := make([]chan int, 4)
	for i := 0; i < len(chs); i++ {
		chs[i] = make(chan int)
		go func(j int) {
			for {
				chs[j] <- j + 1
			}
		}(i)
	}
	out := make([][]int, len(chs))
	for i := 0; i < len(out); i++ {
		for k := i; k < 10+i; k++ {
			out[i] = append(out[i], <-chs[k%len(chs)])
		}
	}
	for i := 0; i < len(out); i++ {
		fmt.Println(out[i])
	}
}

运行

Go Playground