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

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)
}
dongshanyan0322
dongshanyan0322 这与是否使用DialContext无关。我只是通知您Dial已过时,您应该选择DialContext。
接近 4 年之前 回复
duanpuchun5275
duanpuchun5275 与@T.Claverie的答案一起使用DialContext时遇到相同的错误:错误:拨打tcp:本地地址类型192.168.0.1不匹配
接近 4 年之前 回复
duanou2526
duanou2526 您现在应该使用DialContext。有关示例,请参见http包中的DefaultTransport定义。
接近 4 年之前 回复

2个回答

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,
}
doujiao4710
doujiao4710 此问题与此线程无关,也许您应该发布另一个问题。
接近 4 年之前 回复
dqdmvg7332
dqdmvg7332 谢谢,不会产生任何错误。 只有通过某种方式,http.Get才能到达var url中定义的服务器。 当检查http日志时,我看不到任何请求和fmt.Println(response)程序:<nil>错误:拨打tcp:本地地址类型192.168.0.1不匹配
接近 4 年之前 回复



使用文档,卢克... </ p>

https://golang.org/pkg/net/#ResolveIPAddr </ p>

如果您使用 IPAddr结构,应该可以解决您的问题。</ p>
</ div>

展开原文

原文

Use the Docs, Luke...

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐