让结构成员成为Golang的指针是否常见?

Take, for example, the go github package. Just about every member of every struct defined is a pointer to a value rather than a value.

Is this idiomatic Go? Why?

I understand that it reduces the size of the struct (assuming the size of the pointer is less than the size of the value it points to) which may important if you are passing around structs by value a lot. But why not have a struct of values and pass the struct by pointer instead?

In the github package the reason is that most structs are intended to be serialized/deserialized from json from the github api.

The reason they use *int instead of int is because the zero value of a pointer is nil, while the zero value of int is 0. It allows the client to distingish between "this field was not included in the response" and "the value of this field is zero".

This is particularly useful for things like times, where if you do not have nilable types, you will end up with a lot of 00-00-0000 type dates.