Hacker News new | past | comments | ask | show | jobs | submit login

You don't have a single famous one because Go developers tend to hate frameworks and ORM's. If you are interested, I have wrote about some alternatives before here - https://hackernoon.com/the-myth-about-golang-frameworks-and-...

I don't believe that to be true. There are almost too many ORMs for Golang.

Golang has had an issue with fractured ecosystems from the start. Part of this had to do with lack of a package manager. Part of it had to do with companies and developers wanting to move fast and not get bogged down trying to get changes through other peoples process and into their repo. Or perhaps development stalled out as the ORM met the requirements of the developers/project, or for other reasons.

If you evaluate carefully each of the available ORMs it becomes apparent that a lot of them have different short comings and trade-offs, and were created around some theme or feature set missing from the others.

The actual reason is that the language lacks the meta-programming facilities required for creating effective ORMs and certain frameworks. (Whether this is a good thing or a bad thing is a subjective matter.)

Exactly. There's not much choice. The best approximations are considered hacks.

Wait, is that true? I thought that the Java packages like Hibernate were just using method attributes and reflection...doesn't Go have the ability to add attributes to structs and a working reflection library?

They use generics pretty heavily too so it's not only reflection. Generics allow them to do a typesafe interface for the developer to use as well as making less work for the reflection code to do.

Go has reflection, but it doesn't have annotations or generics. Annotations are key for libraries such as hibernate.

Aren't `tags` akin to annotations?

No, Go tags are like metadata which can be accessed through reflection at runtime. Java annotations allow you to actually generate code during the build phase.

I've encountered a bunch of code generation in client-go - I'm not very good at Go, so not sure what the term for the code generation directives in comments is, if there is one.

And annotations and classloaders. Haven't looked at Hibernate in years ("10 years" to be exact /g) but it is possible that it also requires Java and JVM's instrumentation facilities. So certain kind of software magic can't be done with Go.

Options in Go for effective ORM require source level processing.

sqlx (1) is probably the closest thing to a tradition ORM that operates this way

^1: https://github.com/jmoiron/sqlx

I'm not sure that's really a showstopper if you really want to do it? Code generation is powerful and it can be done outside the language.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact