# golang method set ###### tags: `golang learn log` ## Stack overflow https://stackoverflow.com/questions/33587227/method-sets-pointer-vs-value-receiver ```text Values Methods Receivers ----------------------------------------------- T (t T) *T (t T) and (t *T) Methods Receivers Values ----------------------------------------------- (t T) T and *T (t *T) *T ``` ## method set revisit A type may have a _method set_ associated with it. The method set of an [interface type](https://golang.org/ref/spec#Interface_types) is its interface. The method set of any other type `T` consists of all [methods](https://golang.org/ref/spec#Method_declarations) declared with receiver type `T`. The method set of the corresponding [pointer type](https://golang.org/ref/spec#Pointer_types) `*T` is the set of all methods declared with receiver `*T` or `T` (that is, it also contains the method set of `T`). Further rules apply to structs containing embedded fields, as described in the section on [struct types](https://golang.org/ref/spec#Struct_types). Any other type has an empty method set. In a method set, each method must have a [unique](https://golang.org/ref/spec#Uniqueness_of_identifiers) non-[blank](https://golang.org/ref/spec#Blank_identifier) [method name](https://golang.org/ref/spec#MethodName). The method set of a type determines the interfaces that the type [implements](https://golang.org/ref/spec#Interface_types) and the methods that can be [called](https://golang.org/ref/spec#Calls) using a receiver of that type. ### non interface Example [A Tour of Go (golang.org)](https://tour.golang.org/methods/6) [A Tour of Go (golang.org)](https://tour.golang.org/methods/7) ### have interface Example [non pointer receiver](https://play.golang.org/p/CpGzcYh2yHR) [pinter receiver](https://play.golang.org/p/fV9XIHP7NU0) ## 總結 1. 無 interface - 如果 value 是可尋址(addressable)的 value | receiver --------|----- *T | *T and T T | *T and T - 如果 value 是不可尋址的 value | receiver -----|------- T | T 3. 有 interface interface implement receiver | value --|-- *T | *T T | *T and T