Hacker News new | ask | show | jobs
by paukiatwee 4421 days ago
That is true, what if in future ubuntu/centos include Go by default (which might not the version you use)? I believe then will have some GVM or similar tool to solve the problem.

Edit: As others pointed out, Go is compiled binary and does not required runtime (like JVM) so versionning is not issue. Thanks for clearing up.

3 comments

There won't be a need for a GVM as Go is not a stand-alone runtime. Once compiled for a specific platform it will just run. You don't even need it installed on the server. You can cross-compile on your DEV machine and move the binary LIVE. Then it just runs. It doesn't need any libraries on the server.
Does Go not have the concept of linking? If you are deploying several Go applications on the same server that each use libraries, does it include duplication of libraries in every binary?
There is no linking. Each Go binary has all of the libraries it needs baked into it.

So if you have multiple different Go applications on one server, and they use some of the same libraries, then each application's binary will contain a copy of that library.

It makes things a little redundant, but also simplifies the deployment process.

edit: The only exception is if you are using cgo and liking to existing C libraries. In pure Go there is no linking.

All Go applications are statically linked. There are no libraries. It's a single executable that you can copy to your target machine and run.
Go applications require no installed runtime, they compile to native code. You can have no Go installed or any Go installed on the system, and the executable will neither know nor care.
Not being a Go developer I don't understand why this would be the case. Doesn't Go compile code to a binary? Why should Go even be required on the server?