无法找到函数 Marshal()

我正在编写用于生成 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          }

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


Marshal()未包含在net 包文档中,请让我知道如何找到此函数以及为什么它未包含在 net 包中。


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


呼如林
浏览 161回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go