无法找到Marshal()函数

时间:2014-12-29 09:31:02

标签: go package icmp

我正在编写用于生成ICMP数据包的小代码。为此我遵循golang net package的代码。

我确定了以下用于ICMP数据包生成的代码:

   109          c, err := Dial(tt.net, tt.raddr)
   110          if err != nil {
   111              t.Fatalf("Dial failed: %v", err)
   112          }
   113          c.SetDeadline(time.Now().Add(100 * time.Millisecond))
   114          defer c.Close()
   115  
   116          typ := icmpv4EchoRequest
   117          if net == "ip6" {
   118              typ = icmpv6EchoRequest
   119          }
   120          xid, xseq := os.Getpid()&0xffff, i+1
   121          wb, err := (&icmpMessage{
   122              Type: typ, Code: 0,
   123              Body: &icmpEcho{
   124                  ID: xid, Seq: xseq,
   125                  Data: bytes.Repeat([]byte("Go Go Gadget Ping!!!"), 3),
   126              },
   127          }).Marshal()
   128          if err != nil {
   129              t.Fatalf("icmpMessage.Marshal failed: %v", err)
   130          }
   131          if _, err := c.Write(wb); err != nil {
   132              t.Fatalf("Conn.Write failed: %v", err)
   133          }

我无法理解此代码中的以下内容:

  1. Marshal()未包含在net package documentation中,请让我知道如何找到此功能以及为什么它不包含在网络包中。

  2. 请解释第121行(icmpMessage结构和函数调用,因为这些未在此文件中定义)。

1 个答案:

答案 0 :(得分:0)