dongxi5494 2016-10-05 22:46
浏览 44
已采纳

Golang结构定义模式

I'm currently playing with Go, was wondering what are the patterns for defining the data types. For example take the Bencode and representing it as a Go data structure.

like in Haskell

data BEncode = BInt Integer
         | BString L.ByteString
         | BList [BEncode]
         | BDict (Map String BEncode)

in C, we can do something like this

struct Bencoding;

typedef struct ListNode {
    struct Bencoding *cargo;
    struct ListNode *next;
} ListNode;

typedef struct DictNode {
    char *key;
    struct Bencoding *value;
    struct DictNode *next;
} DictNode;

typedef struct Bencoding {
    BType type;
    union {
        long long val;  // used when type == BInt
        ListNode *list; // used when type == BList
        char *str;      // used when type == BString
        DictNode *dict;
    } cargo; // data
} Bencoding;

what is the best way to define these kinds of data structures in Golang. Are there any patterns / good practices with Golang.

  • 写回答

1条回答 默认 最新

  • douwen8424 2016-10-06 04:21
    关注

    Like this?

    type BEncodeType int
    
    const (
        TypeBInt BEncodeType = iota
        TypeBString
        TypeBList
        TypeBDict
    )
    
    type BEncode interface {
        Type() BEncodeType
        Val() interface{}
    }
    
    type BInt int
    
    func (n *BInt) Type() BEncodeType {
        return TypeBInt
    }
    func (n *BInt) Val() interface{} {
        return n
    }
    
    type BString string
    
    func (n *BString) Type() BEncodeType {
        return TypeBString
    }
    func (n *BString) Val() interface{} {
        return n
    }
    
    type BList []BEncode
    
    func (n *BList) Type() BEncodeType {
        return TypeBList
    }
    func (n *BList) Val() interface{} {
        return n
    }
    
    type BDict map[string]BEncode
    
    func (n *BDict) Type() BEncodeType {
        return TypeBDict
    }
    func (n *BDict) Val() interface{} {
        return n
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)