On Mon, Dec 19, 2022 at 8:31 PM Red Daly <redd...@gmail.com> wrote: > Methods cannot take type arguments, so I find myself writing `func Foo(o > Object) {...}` instead of `func (o Object) Foo()` in cases where Foo needs > a type parameter. > > I would like some type of pseudo-method in Go similar to Kotlin's > extension methods. Made up syntax: > > ```go > package foo > > func (o Object) #Foo[T any]() { /* ... */ } // Foo is a pseudo method of > Object > > func main() { > obj := Object{} > obj#Foo() // use # to differentiate from regular methods, or use . > } > ``` > or something more clever. > > I expect a lot of the time people use methods for syntactic reasons, not > so those methods can be used to implement an interface. Methods appear in > godoc along with the type, get better tab completion than functions, etc. > I'm not proposing these pseudo-methods be used in any way to implement > interfaces. > > This may have already been discussed. There have been rejected proposals > for adding methods to types defined elsewhere ( > https://github.com/golang/go/issues/37742 and > https://github.com/golang/go/issues/21401). However, I can't find a > proposal that proposes the Kotlin approach to "extension methods," which is > largely syntax sugar that allows `fun koo(k Kobject): void` to be called > like `k.koo()` by the programmer (rather than `koo(k)`) so long as `koo` is > statically resolved where such `k.koo` calls appear. Is there such a > proposal? >
There are (at least) two: https://github.com/golang/go/issues/56283 https://github.com/golang/go/issues/56242 It's not *exactly* what you describe, but I believe it's close enough. > > This feature would be useful for defining these pseudo-methods on types > within a package or on types from other packages. Using a pseudo-receiver > type that's defined in another package raises some questions about how to > use the pseudo-method without surprising/confusing readers. Most > prominently for writing method-like generic functions. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/e8685cd7-4691-4b74-8c9a-b4a8992dbd20n%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/e8685cd7-4691-4b74-8c9a-b4a8992dbd20n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAEkBMfHnj_xWRw_qsii3V0Sdqq3_%3DoZxzXxxkH5BzZKwjXMPDw%40mail.gmail.com.