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

huangapple go评论108阅读模式
英文:

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

问题

我有以下代码。我得到了这个错误:

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)

有什么办法可以将硬编码的IP放入LocalAddr中吗?

  1. package main
  2. import (
  3. "fmt"
  4. "net"
  5. "net/http"
  6. )
  7. var url = "http://URL/api.xml"
  8. func main() {
  9. q := net.ParseIP("192.168.0.1")
  10. var transport = &http.Transport{
  11. Dial: (&net.Dialer{
  12. LocalAddr: q,
  13. }).Dial,
  14. }
  15. var httpclient = &http.Client{
  16. Transport: transport,
  17. }
  18. response, err := httpclient.Get(url)
  19. fmt.Println(response)
  20. }
英文:

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?

  1. package main
  2. import (
  3. "fmt"
  4. "net"
  5. "net/http"
  6. )
  7. var url = "http://URL/api.xml"
  8. func main() {
  9. q := net.ParseIP("192.168.0.1")
  10. var transport = &http.Transport{
  11. Dial: (&net.Dialer{
  12. LocalAddr: q,
  13. }).Dial,
  14. }
  15. var httpclient = &http.Client{
  16. Transport: transport,
  17. }
  18. response, err := httpclient.Get(url)
  19. fmt.Println(response)
  20. }

答案1

得分: 6

根据文档,确实IP类型没有实现Addr。然而,IPAddr类型实现了Addr接口:

  1. type IPAddr struct {
  2. IP IP
  3. Zone string // IPv6 scoped addressing zone
  4. }

因此,你的代码应该修改为:

  1. q := net.ParseIP("192.168.0.1")
  2. addr := &net.IPAddr{IP: q, Zone: ""}
  3. var transport = &http.Transport{
  4. Dial: (&net.Dialer{
  5. LocalAddr: addr,
  6. }).Dial,
  7. }
英文:

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

  1. type IPAddr struct {
  2. IP IP
  3. Zone string // IPv6 scoped addressing zone
  4. }

Therefore, your code becomes:

  1. q := net.ParseIP("192.168.0.1")
  2. addr := &net.IPAddr{q,""}
  3. var transport = &http.Transport{
  4. Dial: (&net.Dialer{
  5. LocalAddr: addr,
  6. }).Dial,
  7. }

答案2

得分: 3

使用文档,卢克...

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

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

英文:

Use the Docs, Luke...

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

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

huangapple
  • 本文由 发表于 2016年11月4日 22:43:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/40425479.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定