Go’s (:=) operator does type inference. Haskell’s type inference is so powerful that we can write entire complex programs without a single type declaration (though leaving some in is usually preferred for clarity).

Go has channels and goroutines. Haskell has equivalents, along with other powerful constructs for concurrency such as Software Transactional Memory.

Go has interfaces. Haskell has type classes, which can be viewed as generalized Go interfaces. Type classes easily solve one of Go’s biggest problems: lack of generics.

Go has anonymous functions. Haskell has lambdas, currying, type parameters, and type inference which together yield elegant notation for manipulating functions.

Go has numeric constants. Haskell also has numeric literals, but thanks to type classes, we can use constants with user-defined types rather than a specific subset of built-in types.