The summary.
BOTH COMPILE TO BINARIES WITH NO RUNTIME TO INSTALL
Deployment becomes copying one file, with fast startup and modest memory.
GO FAVOURS SIMPLICITY; RUST FAVOURS GUARANTEES
Go is quickly learned and deliberately unclever. Rust prevents whole classes of bug at compile time, at the cost of a genuinely steep learning curve.
IN GO, HANDLE EVERY RETURNED ERROR
Never ignore one to reduce verbosity. Pass context through call chains so a cancelled request stops work downstream.
Watch for routines started and never terminated, and use the race detector during testing.
IN RUST, EXCESSIVE CLONING TO SATISFY THE COMPILER INDICATES A DESIGN TO RESTRUCTURE
And never block inside asynchronous code.
SET TIMEOUTS ON THE SERVER, ON CLIENTS AND ON DATABASE OPERATIONS
In every language, but these are used where that discipline matters most.
BEFORE ADOPTING EITHER, ESTABLISH WHO ELSE CAN MAINTAIN IT
The technical merits are real; the practical question is whether anyone can take it over.