The obvious limitation of Node.js is twofold:
* You have to work around cooperative concurrency. If a single event blocks the event handler, then both your throughput and latency can be severely hurt. A hello world style of program hides this. Go is preemptively scheduled, and even more so in later releases. This allows for far better latency responses, though at the expense of some throughput.
* Node.js is not a priori parallel and thus doesn't utilize more than a single CPU core. Modern CPUs are many-core machines, NUMA, and requires more work in Node.js to utilize fully. In Go, this usage comes "for free" because it runs a web server per request in a goroutine.
However, the hello program doesn't reflect any of these realities.
My experience is that systems are often slow due to unforeseen consequences[0]. Modern software is complex and the bottlenecks can occur in all parts of the system. Said bottlenecks are not always due to the speed of the programming language, the HTTP server, the framework and so. Rather, modern software requires statistics and experimental analysis through the scientific method. This is also why telemetry, observability, instrumentation, dynamic tracing, and measurement have become key factors to good system design in the later years. And some of these have the potential to slow down the system. However, the benefit they bring allows further optimization.
[0] Indeed, Test Lab C-33/a in the Black Mesa Research Facility style of problems often occur in software development.