Why Go Is a Good Fit for VPN and Remote Desktop Tools
Alongside the desktop app in Avalonia/C#, I write a good chunk of the networking logic in my projects using Go. The reason is simple: goroutines and channels make writing code that handles many simultaneous connections (like VPN tunnels or remote desktop sessions) much easier than thread-based concurrency in other languages.
Go also compiles down to a single binary with no extra runtime dependencies. For tools that need to be deployed across different client environments, that matters — no worrying about which .NET runtime version or interpreter is installed on the target machine.
Go’s standard library is also solid for networking — net, crypto/tls, down to raw socket handling — so there’s not much need for external dependencies for the basics. That also reduces the attack surface, which matters a lot for tools dealing with secure connections like VPNs.
The trade-off: Go’s error handling is fairly verbose (lots of if err != nil), and generics are still relatively new compared to other languages. But for networking tools that need to be reliable and easy to deploy, Go remains my first choice.