仓颉编程语言的这个反序列化和序列化比 go 复杂好多 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wsseo
V2EX    程序员

仓颉编程语言的这个反序列化和序列化比 go 复杂好多

  •  
  •   wsseo 215 天前 2010 次点击
    这是一个创建于 215 天前的主题,其中的信息可能已经有所发展或是发生改变。

    golang 用 Unmarshal 和 marshal 函数就行了。

    仓颉要写这个一大堆,有人反馈这个写法跟 C++有的一拼,但是性能不如 java,go ,c++。

    希望官方能优化一下,对初学者友好。

    下面是官网的例子。

    import serialization.serialization.* import encoding.json.* class Person <: Serializable<Person> { var name: String = "" var age: Int64 = 0 var loc: Option<Location> = Option<Location>.None public func serialize(): DataModel { return DataModelStruct().add(field<String>("name", name)).add(field<Int64>("age", age)).add(field<Option<Location>>("loc", loc)) } public static func deserialize(dm: DataModel): Person { var dms = match (dm) { case data: DataModelStruct => data case _ => throw Exception("this data is not DataModelStruct") } var result = Person() result.name = String.deserialize(dms.get("name")) result.age = Int64.deserialize(dms.get("age")) result.loc = Option<Location>.deserialize(dms.get("loc")) return result } } class Location <: Serializable<Location>{ var country: String = "" var province: String = "" public func serialize(): DataModel { return DataModelStruct().add(field<String>("country", country)).add(field<String>("province", province)) } public static func deserialize(dm: DataModel): Location { var dms = match (dm) { case data: DataModelStruct => data case _ => throw Exception("this data is not DataModelStruct") } var result = Location() result.country = String.deserialize(dms.get("country")) result.province = String.deserialize(dms.get("province")) return result } } main() { var js = ##"{ "name": "A", "age": 30, "loc": { "country": "China", "province": "Beijing" } }"## var jv = JsonValue.fromStr(js) var dm = DataModel.fromJson(jv) var A = Person.deserialize(dm) println("name == ${A.name}") println("age == ${A.age}") println("country == ${A.loc.getOrThrow().country}") println("province == ${A.loc.getOrThrow().province}") println("====================") // 上部分实现从 JSON 字符串到自定义类型的转换,下部分实现从自定义类型到 JSON 字符串的转换。 dm = A.serialize() var jo = dm.toJson().asObject() println(jo.toJsonString()) 0 } 
    12 条回复    2025-05-23 09:37:20 +08:00
    DefoliationM
        1
    DefoliationM  
       215 天前 via Android
    ts 就这样吧,感觉还好。go 的那个也挺麻烦的。
    irrigate2554
        2
    irrigate2554  
       215 天前
    和 dart 很像
    flyqie
        3
    flyqie  
       214 天前 via Android
    啥业务非得用这个语言啊...

    难道是国产化要求用了?
    Tomatopotato
        4
    Tomatopotato  
       214 天前
    我认为开发 cj 的那群人应该不会上这个论坛 (笑
    InkStone
        5
    InkStone  
       214 天前
    看了下都是 trivial 的字段映射。定制比较多的序列化和反序列化也就算了,这种 trivial 的就不能直接自动生成么
    wsseo
        6
    wsseo  
    OP
       214 天前
    @flyqie 我觉得学这个语言还是有前途的,就是难学。
    wuxilaoshiren
        7
    wuxilaoshiren  
       214 天前
    @wsseo 学了可以干嘛 专门干国产化的嘛
    wsseo
        8
    wsseo  
    OP
       214 天前
    @wuxilaoshiren 可以做后端开发,也可以鸿蒙 APP 开发
    csfreshman
        9
    csfreshman  
       214 天前
    还真有人学这个呀,这个赛道你们卷去吧,哈哈哈
    sthwrong
        10
    sthwrong  
       214 天前
    看起来就是要自己实现序列化反序列化接口,第三方做个序列化库,用注解生成序列化接口的实现也许可以。
    ns09005264
        11
    ns09005264  
       214 天前
    这个写法就像是仓颉没有注解和反射功能。
    Lockroach
        12
    Lockroach  
       149 天前
    鸿蒙 app 现在主流是用 arkts 吧,感觉仓颉更像做嵌入式设备的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2528 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:13 PVG 19:13 LAX 04:13 JFK 07:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86