Hole-Punching Guide for Golang libp2p

I saw this helpful Rust tutorial for hole-punching using libp2p: libp2p::tutorials::hole_punching - Rust

Is there something similar for go-libp2p? Or a similarly simple sequence of commands using a fixed server for the relay and two local devices as the listening and dialing client?