douna2917 2016-10-26 07:26
浏览 252
已采纳

Go语言中的导出和未导出字段

I have a function in Go, the return value of which I hope to encode using gob. The return value is a struct pointer. However even though I do understand what exported variables are, I am not quite sure how to get it working.

Here is what my function is like

fun loadXYZ(root *structABC) *structABC{
    const once = "stateData.bin"
    rd, errr := ioutil.ReadFile(once)
    if errr!=nil{

        //Do some computation and store in "root"

        buf := &bytes.Buffer{}
        errr = gob.NewEncoder(buf).Encode(root)
        if errr != nil {
            panic(errr)
        }
        errr = ioutil.WriteFile(once, buf.Bytes(), 0666)
        if errr != nil {
            panic(errr)
        }
        return root
    }
    var d *structABC
    errr = gob.NewDecoder(bytes.NewReader(rd)).Decode(&d)
    if errr != nil {
         panic(errr)
    }
    return d
}

This is the error I get

panic: gob: type main.stateNode has no exported fields

I know why the error is occurring. But can someone help me solve it?

  • 写回答

2条回答 默认 最新

  • duan20145 2016-10-26 07:29
    关注

    In go, fields and variables that start with an Uppercase letter are "Exported", and are visible to other packages. Fields that start with a lowercase letter are "unexported", and are only visible inside their own package.

    The encoding/gob package depends on reflection to encode values, and can only see exported struct fields.

    In order to make things encodable, capitalize the first letter of each field name in your stateNode struct that you want to be saved.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 怎么实现输入一个要删除的数后删除后显示剩余数再输入再删除显示剩余数(语言-c语言)
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误