Go has excellent reflection. See the reflect package for details. This makes sense because one of the criticisms the Go authors had of C++ was the lack of good reflection support.
Its dynamic code loading support is not poor, but nonexistent. Go doesn't support loading modules at runtime. In general, loading modules into a giant monolithic program is often a poor design. It's bad for robustness and often bad for security too. It's usually better to structure your design in terms of communicating processes. Go makes that easy by supporting Go globs, protocol buffers, JSON, etc. etc.
I use Java every day at work. One of the big hassles is setting up your CLASSPATH and making sure you have all the jars you need, but not the ones you don't. It's not just possible but common for different versions of the same jar to fight with one another when you have multiple projects dumping jars into the dumping ground-- er, sorry, runtime classpath. It's funny that Java, often held up as the pinnacle of static-ness, has one of the most dynamic loading systems out there.
This extremely dynamic loading system was also implicated in some of the recent Java security vulnerabilities. Basically some pretty cool guy, eh, managed to get access to something very much like eval().
Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds