You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strongswan govici无法序列化Child SA的mark_in/mark_out字段问题

问题原因

Go语言中仅首字母大写的导出字段能被外部包通过反射访问。你的childSA结构体里markIn和markOut字段首字母小写,属于私有字段,govici的MarshalMessage方法无法读取这些字段,因此序列化时会被忽略。

解决方案

将childSA中的字段改为首字母大写的导出字段,同时保留vici标签映射到协议中的mark_in和mark_out字段:

修改后的代码:

package main

import (
    "fmt"

    "github.com/k0kubun/pp/v3"
    "github.com/strongswan/govici/vici"
)

func main() {
    type childSA struct {
        MarkIn  string `vici:"mark_in"`  // 改为首字母大写的导出字段
        MarkOut string `vici:"mark_out"` // 改为首字母大写的导出字段
    }
    type viciConnection struct {
        LocalAddrs  []string            `vici:"local_addrs"`
        RemoteAddrs []string            `vici:"remote_addrs"`
        Children    map[string]*childSA `vici:"children"`
    }

    vc := viciConnection{
        LocalAddrs:  []string{"1.1.1.1"},
        RemoteAddrs: []string{"2.2.2.2"},
        Children: map[string]*childSA{
            "onlyChild": &childSA{
                MarkIn:  "4/0xffffffff",  // 对应修改后的字段名
                MarkOut: "4",             // 对应修改后的字段名
            },
        },
    }

    c, err := vici.MarshalMessage(vc)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }

    pp.Default.SetColoringEnabled(false)
    fmt.Printf("Marshalled message: %s\n", pp.Sprint(c))
}
修改后的输出
Marshalled message: &vici.Message{
  keys: []string{
    "local_addrs",
    "remote_addrs",
    "children",
  },
  data: map[string]interface {}{
    "children": &vici.Message{
      keys: []string{
        "onlyChild",
      },
      data: map[string]interface {}{
        "onlyChild": &vici.Message{
          keys: []string{
            "mark_in",
            "mark_out",
          },
          data: map[string]interface {}{
            "mark_in": "4/0xffffffff",
            "mark_out": "4",
          },
        },
      },
    },
    "local_addrs": []string{
      "1.1.1.1",
    },
    "remote_addrs": []string{
      "2.2.2.2",
    },
  },
}

可以看到mark_in和mark_out字段已正确出现在onlyChild节点的data中,符合预期。

内容的提问来源于stack exchange,提问作者Jeff Learman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:23:37