For gosh sakes, don't make us read code with the scrutiny of a compiler :-) A type declaration after a function name is confusingly similar to an argument list.
Which witch is which?
func Stuff(type T Something)(input T) error { ... }
func Stuffed(input Somethingelse) error { ... }
C++ style is fine; variations on paren placement can be considered
(type T, U) Something // line break or semicolon
(type V) // more on next line
func Stuff(input T, more U, other V) error { ... }
And consider simple function aliases for callers
func TypedStuff Stuff(TypeA, TypeB, TypeC)
const TypedStuff = Stuff(TypeA, TypeB, TypeC) // alternatively
err = TypedStuff(x, y, z)
@rogpeppe, the trouble arises when you have a file of generic and non-generic functions. If it's all one or the other, your perception of text adjusts to that context.
Also a larger number of parameters and/or returns, each specified in the type list with a contract, becomes unwieldy for a single line.