Никогда подобного не делал, но если у вас уже есть код резолвера (который по имени выдаёт IP), то особых проблем не видно…
Как написано в
https://golang.org/pkg/net/http/, “For control over proxies, TLS configuration, keep-alives, compression, and other settings, create a Transport”.
В вашем случае нужно создать экземпяр
http.Transport с вашей собственной функцией Dial:
Dial func(network, addr string) (net.Conn, error)
В этой функции вы, получив хост в параметре “addr”, сами его резолвите, а потом вызываете стандартный net.Dial, но уже не с хостом, а с отрезолвленным IP-адресом. А потом делаете http.Client c этим транспортом:
client := &http.Client{Transport: tr}
и используете его как обычно.