t.Set is a method value. T.Set is a method expression.
The method value t.Set yields a function equivalent to:
func(a int) ( t.Set(a) }
The method expression T.Set yields a function that is equivalent to the method with the receiver as the first argument.
func(t T, a int) { t.Set(a) }
This playground example illustrates the difference between the method value and method expression.
Separate from this discussion about method expressions and method values,
the function Set should take a pointer receiver. Otherwise, the change to t is discarded.
func (t *T) Set(a int) {
t.Tp = a
}
Here's the example with the pointer receiver.