Short answer:
The notation [...] can be used to construct an array literal, but cannot be used in an array declaration. In the example you have provided, the [...] notation is used to declare a struct element. Hence the error. Replace [...] with [n], where n is the actual size of the array.
Long answer:
Unlike many other programming languages, Go includes the length of an array as part of type information. Hence, there is no type in Go that is just an array, but it is always an array of a specific size. For example, in the following code, there are two int arrays, where one is of type [3]int and the other is of type [4]int, and since they are of different types, assigning one to the other is illegal.
package main
import (
"fmt"
"reflect"
)
func main() {
a := [...]int{1, 2, 3}
b := [...]int{1, 2, 3, 4}
fmt.Println(reflect.TypeOf(a), reflect.TypeOf(b))
}
This program prints [3]int [4]int to the console and illustrates that a and b in this program are of different types (find it here on the Go Playground). Since these are different types, assigning a to b (or vice versa) is illegal, and results in compilation error: cannot use b (type [4]int) as type [3]int in assignment
The [...] notation: The [...] can be used only as a part of a literal, and it indicates that the compiler should infer the length of array from the literal itself. This removes from a programmer the burden of counting the number of elements in the array. However, one may still specify a size in the literal, provided the literal has as many or fewer elements in it (in which case, the remaining elements in the resulting array are empty). For e.g. a := [4]int{1,2} is legal and will create this array: [1 2 0 0]
The [...] notation cannot be used in a variable declaration, and hence this statement is invalid: var x [...]int. Similarly, in the type definition of a struct of your example, this statement is illegal: f [...][]string, and requires that you specify the size of the array.
.... No literal, no counting, no..., just state the array size or go with a slice. Have a look at blog.golang.org/slices . And please: Do not call a slice an array or vice versa (because every time someone does a kitten dies). This is just a syntax error combined with a misunderstanding of Go's arrays and slices. You finished the Go tour?