func multiLoop[X, Y any](x []X, y []Y, cb func(i int, x X, y Y)) { if len(x) != len(y) { panic("invalid slice lengths") } for i := 0; i < len(x); i++ { cb(i, x[i], y[i]) } } func foo() { multiLoop([]int{1, 2, 3}, []string{"a", "b", "c"}, func(i int, x int, y string) { fmt.Println(i, x, y) }) }