Use reflect.TypeOf to get the reflect.Type for Foo.
t := reflect.TypeOf(Foo{})
If you don't want to create a value of the type, then get the pointer type and "dereference" that type.
t := reflect.TypeOf((*Foo)(nil)).Elem()
The expression (*Foo)(nil) returns a nil pointer to the type. The Type.Elem method returns the pointed to type.
Iterate through the fields on the type. Type.NumField returns the number of fields on the type. Type.Field returns a StructField by field index.
for i := 0; i < t.NumField; i++ {
fmt.Println(t.Field(i).Name)
}
Run it on the playground.