how to generate bech32/segwit address from pubkey in golang
I have found the answer thanks to modood/btckeygen.
Here is the relevant code extracted from the repo.
witnessProg := btcutil.Hash160(pubkey.SerializeCompressed())
addressWitnessPubKeyHash, err := btcutil.NewAddressWitnessPubKeyHash(witnessProg, chainParams)
if err != nil {
    panic(err)
}
address := addressWitnessPubKeyHash.EncodeAddress()