当已经声明变量时,为什么必须通过类型来使函数生效?

I want use anonymous struct to do something.

var users []struct{
    Name string `json:"name,omitempty"`
    Age int
}

and I have to write the type again to set value

users = make([]struct{
    Name string `json:"name,omitempty"`
    Age int
}, 0, 10)

if I insist using anonymous struct, is there any way to make it more decent?

(if no, I wonder why golang design make function like this...)

Anonymous structs are handy for one-time use.

If you are using it more than once, then define a named struct type.

If you only use it within a single function, you can define the type within the scope of that particular function, so it's obvious that it cannot be used elsewhere:

func myfunc() {
    type MyType struct {
        Name string
    }
    m := MyType{Name: "Hello, World!"} // this type can only be used within this func
    fmt.Println(m)
}

if I insist using anonymous struct, is there any way to make it more decent?

Yes, there is. Use :=:

users := make([]struct{
    Name string `json:"name,omitempty"`
    Age int
}, 0, 10)

Of course, this only works if you're calling make right after you're defining the variable. If these bits are separated by other code, this trick won't work for you.

But don't be afraid to name your types. That's generally a better approach anyway (with or without :=).