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

标签 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)
}

最佳答案

根据文档,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,
}

关于go - net.IP 没有实现 net.Addr(缺少网络方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425479/

相关文章:

go - golang 中的错误处理

go - 如何在golang中将int(int64)转换为uint16?

c++ - 通过 TCP 套接字发送大的 Base64 字符串

postgresql - 如何在 Go 应用程序中处理打开/关闭 Db 连接?

go - 在 Golang 中执行 SQL Plus 命令

android - 从android上传图片到golang服务器并保存在mongodb中

go - Go编程语言中的 slice 和多重赋值

amazon-web-services - AWS Elastic Beanstalk Go文件权限问题

go - 如何在 *tls.Conn 上设置 SetKeepAlivePeriod

for-loop - 可以在 'for .. range' 循环中的每次迭代后添加 final 语句(就像在标准 for 循环中一样)吗?