user2362525
user2362525

Reputation:

net.IP does not implement net.Addr (missing Network method)

I have the following code. I'm getting this error:

testdl.go:17: cannot use q (type net.IP) as type net.Addr in field value: net.IP does not implement net.Addr (missing Network method)

Any idea how to put a hardcoded IP into LocalAddr?

package main

import (
    "fmt"
    "net"
    "net/http"
)

var url = "http://URL/api.xml"

func main() {

    q := net.ParseIP("192.168.0.1")

    var transport = &http.Transport{
        Dial: (&net.Dialer{
            LocalAddr: q,
        }).Dial,
    }
    var httpclient = &http.Client{
        Transport: transport,
    }

    response, err := httpclient.Get(url)
    fmt.Println(response)
}

Upvotes: 4

Views: 6276

Answers (2)

Zan Lynx
Zan Lynx

Reputation: 54325

Use the Docs, Luke...

https://golang.org/pkg/net/#ResolveIPAddr

If you use the IPAddr struct, that should solve your problem.

Upvotes: 3

T. Claverie
T. Claverie

Reputation: 12246

According to the documentation, indeed the IP type does not implement Addr. However, the type IPAddr does:

type IPAddr struct {
    IP   IP
    Zone string // IPv6 scoped addressing zone
}

Therefore, your code becomes:

q := net.ParseIP("192.168.0.1")
addr := &net.IPAddr{q,""}

var transport = &http.Transport{
    Dial: (&net.Dialer{
        LocalAddr: addr,
    }).Dial,
}

Upvotes: 5

Related Questions