0
我对Go非常陌生,并试图通过使用包 miekg DNS来编写DNS服务器。据其example,我复制&粘贴简单的代码片段来执行记录请求:在Go中,'key,ok:= k。(* dns.A)'是什么意思?
package main
import "fmt"
import "github.com/miekg/dns"
func main() {
config, _ := dns.ClientConfigFromFile("/etc/resolv.conf")
c := new(dns.Client)
m := new(dns.Msg)
zone := "miek.nl"
m.SetQuestion(dns.Fqdn(zone), dns.TypeA)
m.SetEdns0(4096, true)
r, _, err := c.Exchange(m, config.Servers[0]+":"+config.Port)
if err != nil {
return
}
if r.Rcode != dns.RcodeSuccess {
return
}
_ = "breakpoint"
for _, k := range r.Answer {
if key, ok := k.(*dns.A); ok {
fmt.Printf("%+v\n", key)
}
}
}
加载由godebug,停在_ = "breakpoint"
:
./godebug run ~/aRequest.go -d /usr/local/go/
-> _ = "breakpoint"
(godebug) p r.Answer
[]dns.RR{(*dns.A)(0xc8200120c0)}
(godebug) n
-> for _, k := range r.Answer {
(godebug) n
-> if key, ok := k.(*dns.A); ok {
(godebug) p k
&dns.A{Hdr:dns.RR_Header{Name:"miek.nl.", Rrtype:0x1, Class:0x1, Ttl:0x708, Rdlength:0x4}, A:net.IP{0x8b, 0xa2, 0xc4, 0x4e}}
(godebug) n
-> fmt.Printf("%+v\n", key)
(godebug) p key
&dns.A{Hdr:dns.RR_Header{Name:"miek.nl.", Rrtype:0x1, Class:0x1, Ttl:0x708, Rdlength:0x4}, A:net.IP{0x8b, 0xa2, 0xc4, 0x4e}}
(godebug) p ok
true
根据godebug,ok == true
和key
似乎一样k
。 k.(*dns.A)
怎么能返回两个变量?