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 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测