将GoLang中的Dial与特定的本地地址一起使用

I need to be able selecting from which IP address my HTTP request should be sent. In my code right now, for DNS caching i'm using the following according to this:

defaultTransport.DialContext = func(ctx context.Context, network string, addr string) (conn net.Conn, err error) {
    separator := strings.LastIndex(addr, ":")
    ips, err := r.LookupHost(ctx, addr[:separator])
    if err != nil {
        return nil, err
    }
    for _, ip := range ips {
        conn, err = net.Dial(network, ip+addr[separator:])
        if err == nil {
            break
        }
    }
    return
}

In order to specify the local address, the only way i found is by using the following:

defaultTransport.DialContext = (&net.Dialer{
    LocalAddr: localAddr,
}).DialContext

How can i achieve combining the above?

You could wrap the local address dialer that you want to use, and delegate the actual calls to it?

localAddrDialier := &net.Dialer{
    LocalAddr: localAddr,
}

// trimmed...

defaultTransport.DialContext = func(ctx context.Context, network string, addr string) (conn net.Conn, err error) {
    separator := strings.LastIndex(addr, ":")
    ips, err := r.LookupHost(ctx, addr[:separator])
    if err != nil {
        return nil, err
    }
    for _, ip := range ips {
        // use the localAddrDialer here for the _actual_ request?
        conn, err = localAddrDialer.DialContext(ctx, network, ip+addr[separator:])
        if err == nil {
            break
        }
    }
    return
}

Or vice-versa, according to which if the net.Dialer's you want to make the actual call

You can create your own Dialer which will use your specific Local Address using net package of Golang like this:

dialer = &net.Dialer{
    LocalAddr: &net.TCPAddr{
        IP:   net.ParseIP("127.0.0.1"),
        Port: 0,
    },
}
conn, err := dialer.Dial("tcp", "127.0.0.1:2525")

You can also specify your specific Port.But using Port 0 means it will use any dynamic port value to make connection to another Server.