仓颉编程语言的这个反序列化和序列化比 go 复杂好多 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
wsseo

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

  •  
  •   wsseo Mar 18, 2025 2430 views
    This topic created in 420 days ago, the information mentioned may be changed or developed.

    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")) rturn 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 replies    2025-05-23 09:37:20 +08:00
    DefoliationM
        1
    DefoliationM  
       Mar 18, 2025 via Android
    ts 就这样吧,感觉还好。go 的那个也挺麻烦的。
    irrigate2554
        2
    irrigate2554  
       Mar 18, 2025
    和 dart 很像
    flyqie
        3
    flyqie  
       Mar 18, 2025 via Android
    啥业务非得用这个语言啊...

    难道是国产化要求用了?
    Tomatopotato
        4
    Tomatopotato  
       Mar 19, 2025
    我认为开发 cj 的那群人应该不会上这个论坛 (笑
    InkStone
        5
    InkStone  
       Mar 19, 2025
    看了下都是 trivial 的字段映射。定制比较多的序列化和反序列化也就算了,这种 trivial 的就不能直接自动生成么
    wsseo
        6
    wsseo  
    OP
       Mar 19, 2025
    @flyqie 我觉得学这个语言还是有前途的,就是难学。
    wuxilaoshiren
        7
    wuxilaoshiren  
       Mar 19, 2025
    @wsseo 学了可以干嘛 专门干国产化的嘛
    wsseo
        8
    wsseo  
    OP
       Mar 19, 2025
    @wuxilaoshiren 可以做后端开发,也可以鸿蒙 APP 开发
    csfreshman
        9
    csfreshman  
       Mar 19, 2025
    还真有人学这个呀,这个赛道你们卷去吧,哈哈哈
    sthwrong
        10
    sthwrong  
       Mar 19, 2025
    看起来就是要自己实现序列化反序列化接口,第三方做个序列化库,用注解生成序列化接口的实现也许可以。
    Fatinora
        11
    Fatinora  
       Mar 19, 2025
    这个写法就像是仓颉没有注解和反射功能。
    Lockroach
        12
    Lockroach  
       May 23, 2025
    鸿蒙 app 现在主流是用 arkts 吧,感觉仓颉更像做嵌入式设备的
    About     Help     Advertise     Blog     API     FAQ     Solana     3658 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 102ms UTC 05:01 PVG 13:01 LAX 22:01 JFK 01:01
    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