V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
voidmnwzp
V2EX  ›  程序员

阿里的文档代码都有股 Java 味。。

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

    看得有点生理不适了

    // This file is auto-generated, don't edit it. Thanks.
    package main
    
    import (
      "encoding/json"
      "strings"
      "fmt"
      "os"
      dyvmsapi20170525  "github.com/alibabacloud-go/dyvmsapi-20170525/v4/client"
      openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      util  "github.com/alibabacloud-go/tea-utils/v2/service"
      "github.com/alibabacloud-go/tea/tea"
    )
    
    
    /**
     * 使用 AK&SK 初始化账号 Client
     * @return Client
     * @throws Exception
     */
    func CreateClient () (_result *dyvmsapi20170525.Client, _err error) {
      // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
      // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见: https://help.aliyun.com/document_detail/378661.html 。
      config := &openapi.Config{
        // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 。
        AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
        // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET 。
        AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
      }
      // Endpoint 请参考 https://api.aliyun.com/product/Dyvmsapi
      config.Endpoint = tea.String("dyvmsapi.aliyuncs.com")
      _result = &dyvmsapi20170525.Client{}
      _result, _err = dyvmsapi20170525.NewClient(config)
      return _result, _err
    }
    
    func _main (args []*string) (_err error) {
      client, _err := CreateClient()
      if _err != nil {
        return _err
      }
    
      batchRobotSmartCallRequest := &dyvmsapi20170525.BatchRobotSmartCallRequest{
        CalledShowNumber: tea.String("your_value"),
        CorpName: tea.String("your_value"),
        CalledNumber: tea.String("your_value"),
      }
      tryErr := func()(_e error) {
        defer func() {
          if r := tea.Recover(recover()); r != nil {
            _e = r
          }
        }()
        // 复制代码运行请自行打印 API 的返回值
        _, _err = client.BatchRobotSmartCallWithOptions(batchRobotSmartCallRequest, &util.RuntimeOptions{})
        if _err != nil {
          return _err
        }
    
        return nil
      }()
    
      if tryErr != nil {
        var error = &tea.SDKError{}
        if _t, ok := tryErr.(*tea.SDKError); ok {
          error = _t
        } else {
          error.Message = tea.String(tryErr.Error())
        }
        // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
        // 错误 message
        fmt.Println(tea.StringValue(error.Message))
        // 诊断地址
        var data interface{}
        d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
        d.Decode(&data)
        if m, ok := data.(map[string]interface{}); ok {
          recommend, _ := m["Recommend"]
          fmt.Println(recommend)
        }
        _, _err = util.AssertAsString(error.Message)
        if _err != nil {
          return _err
        }
      }
      return _err
    }
    
    
    func main() {
      err := _main(tea.StringSlice(os.Args[1:]))
      if err != nil {
        panic(err)
      }
    }
    
    46 条回复    2024-04-28 17:47:58 +08:00
    povsister
        1
    povsister  
       52 天前
    头一次见把 go 代码写这么丑的,有一种不伦不类的美
    NeoZephyr
        2
    NeoZephyr  
       52 天前
    有谁规定一定要怎么写了嘛
    youngce
        3
    youngce  
       52 天前
    _result,_err 真是天才🤣
    NessajCN
        4
    NessajCN  
       52 天前
    这段还好啊? 没发现太重的 oop 味儿
    没整个 100 层的抽象封装继承算什么 jvav 味儿
    yanyao233
        5
    yanyao233  
       52 天前 via Android
    _err 草
    flyqie
        6
    flyqie  
       52 天前
    阿里。。

    阿里家换语言也是散不去的 java 味道。。

    习惯了就好,只能再封装下眼不见为净。。
    cbdyzj
        7
    cbdyzj  
       52 天前
    这个代码感觉是根据 Java 代码自动生成的吧,不像是人类写的
    我记得之前看到过阿里云的 Python 的 SDK 是根据 Java SDK 自动生成的
    gitrebase
        8
    gitrebase  
       52 天前   ❤️ 4
    @cbdyzj 是的,第一行其实写得很清楚了:auto-generated
    me1onsoda
        9
    me1onsoda  
       52 天前
    不懂就问,哪里有 Java 味
    flyqie
        10
    flyqie  
       52 天前
    @cbdyzj #7

    那感觉更离谱了,挺好奇阿里这个是怎么生成出来的。

    sdk example code 自动生成基于 java 的其他语言代码?

    这年头连 sdk 都不打算好好写了吗。。。
    flyqie
        11
    flyqie  
       52 天前
    而且,这自动生成出来的还有不少奇怪的内容。

    `_result = &dyvmsapi20170525.Client{}` 是一个完全没有意义的定义

    `return _result, _err` 都给返回值具名了为啥还要这么返回?

    `if tryErr != nil { ... } return _err` 为啥在这个 if 里还要单独 return 一个_err ?在最后统一 return 不就完事了,反正下面也没有其他操作。
    totoro52
        12
    totoro52  
       52 天前
    if tryErr != nil { 这波操作我直接看傻了哈哈哈哈哈
    Honwhy
        13
    Honwhy  
       52 天前
    这是那个多语言 SDK 吧
    thevita
        14
    thevita  
       52 天前
    还好吧,,,怎么会有人去抠自动生成的代码 @throws Exception 多明显啊,就是基于 java 生成的,(如果这代码是 文档/demo ,那使劲骂,这点投入都不愿意)

    相比之下 他们的 sdk package 命名是怎么回事, 我看 github.com/alibabacloud-go 这个仓库下的 sdk 都代个日期后缀,是用这个来管理版本吗????
    thevita
        15
    thevita  
       52 天前
    tryErr 这个 明显是生成自一段 try catch ,基于规则的代码翻译嘛很正常,因为规则都具有局部性,又不是人写代码, “反正下面也没有其他操作”,规则当然是不知道的,可以说这个翻译写得不好,但是写得更好也没有任何收益啊,只要保证逻辑正确就行了

    再次,如果这段代码是给人看的,就该往死里骂,否则你就不应该打开这段代码
    kneo
        16
    kneo  
       52 天前   ❤️ 3
    转译出来的代码,第一优先级是正确性,然后是生成后代码的性能。这两者挑不出毛病的话,建议保持安静。不要觉得你比写编译器的人聪明。
    1194129822
        17
    1194129822  
       51 天前   ❤️ 8
    v 站的技术板块已经沦落到这样了吗,你是不是不引战就生理不适?
    whoisjohnlee
        18
    whoisjohnlee  
       51 天前   ❤️ 1
    This file is auto-generated, don't judge it. Thanks.
    lichao
        19
    lichao  
       51 天前
    @kneo 文档代码,是给人读的,为什么要用自动生成这种奇奇怪怪的代码,感觉楼主的吐槽完全没毛病
    FightPig
        20
    FightPig  
       51 天前
    你去看看腾讯的 tencentcloud-sdk-ruby, 你会发现新世界
    iX8NEGGn
        21
    iX8NEGGn  
       51 天前
    "This file is auto-generated, don't edit it. Thanks.",都已经能自动生成一个能跑的项目了,还奢望什么其他的。
    IvanLi127
        22
    IvanLi127  
       51 天前
    这种 sdk 真不知道是哪个天才的创意,恶心死我了,有种不伦不类的感觉。
    xiuming142857
        23
    xiuming142857  
       51 天前
    远离阿里保平安
    xiuming142857
        24
    xiuming142857  
       51 天前
    杭州卷王,人口不断往杭州涌入,卷不死你们。
    flyqie
        25
    flyqie  
       51 天前   ❤️ 1
    janus77
        26
    janus77  
       51 天前   ❤️ 1
    你们倒是搞清楚啊,到底是喷阿里还是喷 java ,还是喷 AI 啊。。。
    kanepan19
        27
    kanepan19  
       51 天前
    喷 java 很有意思?
    securityCoding
        28
    securityCoding  
       51 天前
    说实话我觉得大多数 open api 换成 protobuf grpc 能省不少事情
    l8L12cwti87t9Kwg
        29
    l8L12cwti87t9Kwg  
       51 天前 via Android   ❤️ 1
    阿里的东西是真的感觉不论不类,啥品种产品都有,但是不是缺这就是缺那,或者就很难用
    zizon
        30
    zizon  
       51 天前
    生成结构挺清晰的其实.

    初始化.
    单独 core function
    集中异常处理,甚至看得出框架原型结构可能是上报到个异常收集中心.
    mmdsun
        31
    mmdsun  
       51 天前
    注释、命名、try 有点像 AI 转化的?
    /**
    * 使用 AK&SK 初始化账号 Client
    * @return Client
    * @throws Exception
    */

    tryErr := func()(_e error) {
    defer func() {
    if r := tea.Recover(recover()); r != nil {
    _e = r
    }
    }()
    // ...
    }()

    CreateClient
    pennai
        32
    pennai  
       51 天前 via Android
    This file is auto-generated, don't edit it. Thanks.
    自动生成的代码,有啥好看的,要看就看生成模板的代码
    bugu1986
        33
    bugu1986  
       51 天前 via iPhone
    @cbdyzj 是根据文档 朴灵开发的
    SeaTac
        34
    SeaTac  
       50 天前 via iPhone
    楼上这些用户是不是看到阿里和 java 这俩关键字组合就自动触发回复了
    sdk 和文档代码是自动生成的再正常不过 要人手写那大家都别干活了 全去维护 sdk 和文档得了
    lyxxxh2
        35
    lyxxxh2  
       50 天前
    @SeaTac
    "sdk" "代码文档" 自动生成?
    第一次听说。

    维护个 sdk 和文档,还要全部人?
    啥量级啊?
    hancai2
        36
    hancai2  
       50 天前
    本来想拿阿里云的监控数据, 看了一眼 go 的 sdk ,太烂了,直接放弃。
    SeaTac
        37
    SeaTac  
       50 天前 via iPhone
    @lyxxxh2
    挺正常的
    如果需要添加新的 API 或对已有 API 进行改动的话就改 yaml 文件,里面 path/type/parameter/response 包括每一个 parameter description 都有
    改完给 sdk team review ,sdk 每周自动生成一个 preview 版本,里面包含所有常用语言的 sdk ,这种事情用人力不仅费时费力也 error-prone
    lichao
        38
    lichao  
       50 天前
    @SeaTac 文档就是给人读的,用机器生成让人看了很费劲的代码,说明根本没有尊重读文档的人;
    lichao
        39
    lichao  
       50 天前
    难怪阿里系的 APP 那么卡,时间和精力都耗费在这些“高科技”上了
    SeaTac
        40
    SeaTac  
       50 天前 via iPhone
    @lichao
    阿里文档我没看过没兴趣 但是自动生成这件事真的很正常
    sdk 动辄支持十几个语言 人力维护不切实际也没有必要 准确第一 可读第二
    lichao
        41
    lichao  
       50 天前
    @SeaTac
    1. 这个帖子上的内容就是文档代码,你肯定是看过了才会留言的。
    2. 阿里自己当然有权决定用人力维护或是机器维护,但是说到底还是不尊重读文档的人,就像他家 APP 不尊重用户一样
    SeaTac
        42
    SeaTac  
       50 天前 via iPhone
    @lichao
    怎么说呢 aws azure gcp 大家都是这么干的 无非是有些 API 文档写的细一点有些写的乱一点 具体看相应的组 这跟尊不尊重没关系 实在看不懂开 support ticket 嘛
    flyqie
        43
    flyqie  
       50 天前 via Android
    @SeaTac #42

    问题在于 sdk example code ,v1 版本是手写的,v2 是自动生成的效果非常不好的。

    你要说 sdk 内部逻辑随他去,反正能跑就行。

    sdk example code 这种专门给开发者看的东西自动生成效果这么不好就直接发出来似乎 aws azure gcp 也不敢这么干吧?
    SeaTac
        44
    SeaTac  
       50 天前
    @flyqie
    我重新看了一遍这个 sample code ,说实话除了那个跟乱码一样的变量名以外我没觉得有什么槽点
    config 需要什么变量,endpoint 是什么,如何创建 client ,如何传参,写的都挺清楚
    当然我不知道按这么写能不能跑 毕竟我没用过阿里云也不知道这个 api 干什么 但我觉得无论如何都算不上“效果这么不好”
    还是那句话,看不懂开 support ticket 呗
    flyqie
        45
    flyqie  
       50 天前 via Android
    @SeaTac #44

    对比下阿里 v1 跟 v2 的示例代码。

    这俩差距挺大的,sdk example code 最重要的是清晰,在上面的代码上我完全看不出来清晰,其中有很多奇怪的无意义内容,如果你觉得这种代码是个没有槽点的,那我只能说可能个人要求不一样吧,反正我是接受不了。
    Richared
        46
    Richared  
       50 天前
    这不是根据 java 代码生成的 go 么,现在黑 java 政治正确?阿里用 java 做的东西不行?还是用其他语言做的东西行了?不太懂,每天不就搬砖么,用什么形状的砖夹子重要么。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1159 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:58 · PVG 06:58 · LAX 15:58 · JFK 18:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.