Go is Getting Generic Methods
There's an implemented proposal with GOEXPERIMENT adding generic methods to Go, and the reaction is positive in a way that I think slightly misreads what the feature actually does. I couldn't think of a way to trim my thoughts down to 280 characters so here I am.
The change is narrow whereby methods will be allowed to declare their own type parameters, the same way top-level functions already can. No changes to interfaces, dynamic dispatch, or reflection support needed. Under the hood, every generic method call can be mechanically rewritten into a generic function call, which is what made this feasible where it previously wasn't.
The examples floating around tend to focus on chaining and builder patterns, but that's not really the point. The actual problem being solved is namespace pollution. Right now, if you want a generic operation associated with a type, you have no choice but to put it at package scope, invent a name that won't collide with anything, and accept that your editor won't surface it when you dot into the type with autocomplete or whatever. Generic methods fix that with no runtime cost.
The part worth thinking harder about is the interface asymmetry. A method with signature Read[T any]([]T) (int, error) will not satisfy io.Reader, even though a pinned instantiation Read[byte] would match perfectly. That's by design and it's a permanent constraint as opposed to a temporary limitation. This feature is betting that generic methods satisfying non-generic interfaces is a problem that will never needs solving, so the gap is acceptable. If that turns out to be wrong, any code relying on a type not implementing an interface through a generic method becomes a silent behavior change. There's no opt-out mechanism in the current proposal.
It's a strictly additive backward-compatible feature that solves a problem without complicating the runtime model. I like it. It's been a long time since I've written C# or Java but it's not that dissimilar. Where it differs is that Go's implementation is at compiler time with no interface satisfaction. C# supports generic interface contracts and Java erases them at runtime. The asymmetry with interfaces seems like a smell, but it's a bounded one. Just don't let the builder pattern examples fool you into thinking that's the reason it landed.
With regards to security I can't find anything of note that doesn't already exist in existing generics. The implementation compiles to package-level generic function so the attack surface is the same. Type parameters are visible at runtime from compilation, so there is nothing new to probe or leak via reflection. Interface asymmetry if anything acts as a security feature in disguise since you can't accidentally satisfy a security-sensitive interface through a generic method.