华人澳洲中文论坛

热图推荐

    大龄顺序员,还要须要学习GO言语吗

    [复制链接]

    2023-2-21 15:38:15 18 0

    从事开发曾经15年了,次要从事java言语开发,已有10余年,期间搞过一段时间python、PHP、ASP、C#、NodeJS,也说不出哪一种言语孰好孰坏吧,没有最佳的言语,只要最适合的言语。
    比来因名目的需求,学习GO言语,筹备用GO言语开发,因为JAVA言语已积重难返,在接触新的言语时,不免心里会做一番对比,我这里说一下GO言语中的一些奇葩的设定或者使用不舒服之处:
    (1)、在JAVA里,所有皆接口,习气了接口的灵敏和可扩展,我接触GO言语后,GO言语的函数是一等公民,接口属于鸭子类型,不外仍是喜爱从接口开始编程。


    GO接口完成
    (2)、GO言语的可见性分包内可见和包外可见两个粒度,假如变量/函数第一个字符是大写,则包内包外可见,拜服设计人奇葩的脑洞,用起来十分好受,假如变量是包内可见,我要改为包外可见,要把这个变量整个该一遍。


    GO 可见度
    (3)、GO言语异样处置机制有两种,一种是使用panic/recover,一种是经过函数可前往多个值的特性前往,民间保举使用第二种,然而第二种充斥着各种err的处置和前往,代码量成倍减少,比较之下,更喜爱java的try/catch或者间接抛出异样


    GO使用panic/recover处置异样


    GO使用前往error形式处置异样
    (4)、GO包处置机制,同一个目录下包名是相反的,觉得粒度太大了,举个例子,utils目录下有两个工具类NumberUtils、DateUtils,都有同一个办法ToStr,因为同属于utils包名下,是不克不及完成两个同名办法的,没方法,只能在utils目录下,分别创立strings、date两个目录,或者把办法改为NumberToStr和DateToStr。
    (5)、GO言语不反对注解,没有切面编程,觉得不太便利,也不简洁,例如要为已实现的业务模块添加日志记载功用,只能把日志记载的代码,协程一个通用的接口,加到每一个个办法外面去。
    (6)、GO言语从言语级别反对协程编程,这也是GO言语比其余言语弱小的的地方,然而不反对住手,很不敌对,假如要住手协程,个别采取通道、context触发事情来住手协程,住手进程也有点费事;假如是处置梗阻事务的协程,例如衔接网络、打印机等等,只能设定超机会制完成了。


    GO使用context住手协程

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    返回列表 本版积分规则

    :
    中级会员
    :
    论坛短信
    :
    未填写
    :
    未填写
    :
    未填写

    主题36

    帖子47

    积分218

    图文推荐