gpt4 book ai didi

go - 当 NextDecoder 依赖于上一层而不是当前层时,如何正确编写自定义层?

转载 作者:行者123 更新时间:2023-12-01 21:14:46 25 4
gpt4 key购买 nike

我正在用 gopacket 编写自定义层解码器。

A层包含一个字段 Type可以是以下值之一:

  • B-only,下一层是 B层 ,后跟原始有效载荷
  • C-only,下一层是 C层 ,后跟原始有效载荷
  • B-C,下一层是 B层 ,后跟 C层然后是原始有效载荷

  • 中没有字段B层可以用来知道 C层是下一个还是不是。 B层 C层解码不依赖于其他层是否存在。

    编写 的解码函数的正确方法是什么? A层 ,因为它知道下一层是什么?

    关于使用 gopacket 自定义层的教程并不多,而且这种情况与那里介绍的基本情况不同。

    看来逻辑应该放在 A层解码函数,就在调用 p.NextDecoder 之前.

    我想到了两种方法来实现这一点:

    1.使用闭包

    添加字段 nextDecoder Decoder到结构 B层 .
    的解码器中A层 , 当 Type是 C-only,只需使用 的解码器C层 .否则,创建一个结构 B层并填写字段 nextDecoder因此。然后在闭包中使用这个结构,它将用作下一个解码器。

    问题

    的解码逻辑B层将在 A层解码功能(参见下面 Palyground 中的代码)。
    此外,注册 时使用哪个解码函数B层gopacket.RegisterLayer ?

    2.有两个单独的层LayerB-C和LayerB-only

    B-C层下一个解码器将是 LayerC的, 仅 B 层 's 将只是有效负载层。

    问题

    的解码功能仅 B 层 B-C层是一样的,期待调用 p.NextDecoder .
    由于 go 中没有“继承”的概念,我不确定如何设计它以避免重复。也许创建一个 LayerB-base 函数接口(interface) nextDecoder() LayerType , 并制作 B-C层仅 B 层 实现吗?或嵌入类型 LayerB-base 具有功能 Decode ?但他们都感觉不对劲。

    代码

    以下是每种描述方式的一些代码: https://play.golang.org/p/N9ZpYqFb16Q .图层的实际内容不相关,除了 LayerA.Type .

    此代码的结果与预期的一样,但我想知道是否有更好或更惯用的方法。

    最佳答案

    您可以通过将下一层声明为接口(interface)来做到这一点,该接口(interface)可以支持 B 或 C。只要您声明的任何内容都适合作为 LayerType,这应该可以正常工作。

    关于go - 当 NextDecoder 依赖于上一层而不是当前层时,如何正确编写自定义层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56907724/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com