net.IP没有实现net.Addr(缺少网络方法)

时间:2016-11-04 14:43:11

标签: go

我有以下代码。我收到此错误:

testdl.go:17:不能在字段值中使用q(类型net.IP)作为net.Addr类型:     net.IP没有实现net.Addr(缺少网络方法)

知道如何将硬编码的IP放入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)
}

2 个答案:

答案 0 :(得分:3)

根据文档,IP类型确实没有实现Addr。但是,类型IPAddr会执行:

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

因此,您的代码变为:

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

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

答案 1 :(得分:3)

使用Docs,Luke ......

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

如果你使用IPAddr结构,那应该可以解决你的问题。