Go couldn’t load code dynamically prior to Go 1.8. I’m a big proponent of plugin-based systems, which in many cases require loading plugins dynamically. I even considered at some point writing a plugin package based on C integration.
Go has a very interesting type system. It eschews classes and inheritance in favor of interfaces and composition, but on the other hand it doesn’t have templates or generics. The way it handles collections is also unique.
Go programs that run multiple concurrent computations in goroutines need to manage their lifetime. Runaway goroutines can get into infinite loops, deadlock other waiting goroutines, or just take too long. Ideally, you should be able to cancel goroutines or have them time out after a fashion.
Go is an amazing language with a lot of momentum, and it’s focused on simplicity. This approach is evident in its standard library, which provides all the essentials, but not much more.
Go’s object-oriented model revolves around interfaces. I personally believe that interfaces are the most important language construct and all design decisions should be focused on interfaces first.
Go is a special language. It is very refreshing in its approach to programming and the principles it promotes. It helps that some of the language inventors were early C pioneers. The overall feeling of Go is 21st-century C.
Go is a fantastic programming language. It also comes with a comprehensive tool chain. Many developers just use plain text editors with or without plugins to write Go code, but many others prefer to use proper IDEs (integrated development environments).