无法正确地取消引用指针并从内存地址数组中获取实际值

Curiones

在过去的几天里,我开始选择Go,主要依靠语言规范和软件包文档,但是在解析net.LookupNS的正确用法时遇到了问题由于它是一种指针类型,返回一个NS服务器值的内存地址数组,因此我想访问实际值/取消引用该数组。

该程序:

package main

import "fmt"
import "net"
import "os"

var host string

func args() {
    if len(os.Args) != 2 {
        fmt.Println("You need to enter a host!")
    } else {
        host = os.Args[1]
    }
    if host == "" {
        os.Exit(0)
    }
}

func nslookup() []*net.NS {
    nserv, err := net.LookupNS(host)
    if err != nil {
        fmt.Println("Error occured during NS lookup", err)
    }
    return *&nserv
}

func main() {
    args()
    fmt.Println("Nameserver information:", host)
    fmt.Println("   NS records:", nslookup())
}

给定例如google.com,它将显示以下内容:

Nameserver information: google.com
   NS records: [0xc2100376f0 0xc210037700 0xc210037710 0xc210037720]

除了内存地址位置,我想查看被取消引用的值,例如:

   NS records: ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"]

现在显然,我希望将它们作为字符串的数组/切片,但是问题是,我可以获得实际名称服务器的唯一方法如下:

func nslookup() *net.NS {
  // The rest of the function
return *&nserv[0] // This returns the first nameserver

以上返回以下内容:

Nameserver information: google.com
   NS records: &{ns1.google.com.} 

尽管这至少返回了实际值而不是内存地址,但它需要索引,索引不是很灵活,并且没有以非常用户友好的格式进行格式化。同样,无法将[] * net.NS结构直接转换为字符串。

问题:如何获取一个名称服务器数组而不是内存地址,最好是作为一个数组/字符串切片?

一对一

好几个问题:

  • 你为什么回来*&nservGo不是C,请停止您正在做的所有事情,并阅读Effective Go

  • 您的nslookup函数返回的一部分*net.NS,也就是指针的一部分,因此fmt.Println打印正确的内容,如果您想了解更多详细信息,可以将其fmt.Printf%#v%#q修饰符一起使用以查看数据的实际外观。

例:

package main

import "fmt"
import "net"
import "os"

var host string

func nslookupString(nserv []*net.NS) (hosts []string) {
    hosts = make([]string, len(nserv))
    for i, host := range nserv {
        hosts[i] = host.Host
    }
    return
}

func nslookupNS(host string) []*net.NS {
    nserv, err := net.LookupNS(host)
    if err != nil {
        fmt.Println("Error occured during NS lookup", err)
    }
    return nserv
}

func init() { //initilizing global arguments is usually done in init()
    if len(os.Args) == 2 {
        host = os.Args[1]
    }
}

func main() {
    if host == "" {
        fmt.Println("You need to enter a host!")
        os.Exit(1)
    }
    fmt.Println("Nameserver information:", host)
    ns := nslookupNS(host)
    fmt.Printf("   NS records String: %#q\n", nslookupString(ns))
    fmt.Printf("   NS records net.NS: %q\n", ns)
    for _, h := range ns {
        fmt.Printf("%#v\n", h)
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无效的内存地址或nil指针取消引用

来自分类Dev

指针变量无法正确处理内存地址

来自分类Dev

perl获取数组值而不是内存地址

来自分类Dev

运行时错误:无效的内存地址或nil指针取消引用

来自分类Dev

atomic.AddInt64导致无效的内存地址或nil指针取消引用

来自分类Dev

追加到结构片时无效的内存地址或nil指针取消引用

来自分类Dev

无效的内存地址或切片上的nil指针取消引用

来自分类Dev

使用http.Get()时无效的内存地址或nil指针取消引用

来自分类Dev

Golang:恐慌:运行时错误:无效的内存地址或nil指针取消引用

来自分类Dev

template.Execute():无效的内存地址或nil指针取消引用

来自分类Dev

运行时错误:无效的内存地址或分页时取消了nil指针的引用

来自分类Dev

如何通过C中的内存地址获取数组索引?

来自分类Dev

LLDB无法读取argv指针数组中的内存地址(在C中main方法中作为参数给出)

来自分类Dev

如何正确地引用作为地址传递给函数的char **指针?

来自分类Dev

Golang:恐慌:运行时错误:使用bufio.Scanner无效的内存地址或nil指针取消引用

来自分类Dev

数组的内存地址

来自分类Dev

如何在C中的结构的指针成员中存储2d数组的内存地址

来自分类Dev

保存指针的内存地址

来自分类Dev

指针返回内存地址?

来自分类Dev

如何获取64位指针的内存地址?

来自分类Dev

如何使用malloc获取c中指针的内存地址,然后在该地址处分配char数组?

来自分类Dev

如何正确地从表单获取数组?

来自分类Dev

C中的函数指针和内存地址

来自分类Dev

为什么指针中的内存地址很重要

来自分类Dev

ASM x86如何正确地从数组获取指针?(16位TASM / DOS)

来自分类Dev

取消引用的指针的地址

来自分类Dev

Swift数组按值传递...相同的内存地址?

来自分类Dev

使用十六进制内存地址获取变量的值

来自分类Dev

使用十六进制内存地址获取变量的值

Related 相关文章

  1. 1

    无效的内存地址或nil指针取消引用

  2. 2

    指针变量无法正确处理内存地址

  3. 3

    perl获取数组值而不是内存地址

  4. 4

    运行时错误:无效的内存地址或nil指针取消引用

  5. 5

    atomic.AddInt64导致无效的内存地址或nil指针取消引用

  6. 6

    追加到结构片时无效的内存地址或nil指针取消引用

  7. 7

    无效的内存地址或切片上的nil指针取消引用

  8. 8

    使用http.Get()时无效的内存地址或nil指针取消引用

  9. 9

    Golang:恐慌:运行时错误:无效的内存地址或nil指针取消引用

  10. 10

    template.Execute():无效的内存地址或nil指针取消引用

  11. 11

    运行时错误:无效的内存地址或分页时取消了nil指针的引用

  12. 12

    如何通过C中的内存地址获取数组索引?

  13. 13

    LLDB无法读取argv指针数组中的内存地址(在C中main方法中作为参数给出)

  14. 14

    如何正确地引用作为地址传递给函数的char **指针?

  15. 15

    Golang:恐慌:运行时错误:使用bufio.Scanner无效的内存地址或nil指针取消引用

  16. 16

    数组的内存地址

  17. 17

    如何在C中的结构的指针成员中存储2d数组的内存地址

  18. 18

    保存指针的内存地址

  19. 19

    指针返回内存地址?

  20. 20

    如何获取64位指针的内存地址?

  21. 21

    如何使用malloc获取c中指针的内存地址,然后在该地址处分配char数组?

  22. 22

    如何正确地从表单获取数组?

  23. 23

    C中的函数指针和内存地址

  24. 24

    为什么指针中的内存地址很重要

  25. 25

    ASM x86如何正确地从数组获取指针?(16位TASM / DOS)

  26. 26

    取消引用的指针的地址

  27. 27

    Swift数组按值传递...相同的内存地址?

  28. 28

    使用十六进制内存地址获取变量的值

  29. 29

    使用十六进制内存地址获取变量的值

热门标签

归档