douchao9899 2019-05-04 06:41
浏览 208
已采纳

如何使用flask_restplus定义字典字段,以在使用swagger代码生成的go代码中使用?

I have used swagger CLI to generate go code to call my flask app. swagger codegen converts fields.Raw type defined with flask_restplus model to *interface{} in go

assigning the value to the field with *interface{} type in go returns back

prog.go:18:26: cannot use notebook_spec_secrets (type map[string]string) as type *interface {} in assignment: *interface {} is pointer to interface, not interface

You can test it here https://play.golang.org/p/sFE9Qr-72_G

A quick and dirty fix will be changing the generated code by swagger cli and change

NotebookSpec *interface{}

to

NotebookSpec interface{}

  1. Is it possible to cast dictionary to *interface{} in go? (my google search shows a pointer to the interface in go is invalid and logically is not correct )

  2. How to define a dictionary field with flask-restplus

run_definition = api.model('Run definition',
                           {

                               'notebook_spec_secrets':
                               fields.Raw(required=False,
                                          example={
                                              "eventhub_source_cs": "Endpoint=sb://xxxx.servicebus.windows.net/;SharedAccessKeyName=xxxx;SharedAccessKey=xxxx=;EntityPath=sourceeh",
                                              "eventhub_destination_cs": "Endpoint=sb://xxxx.servicebus.windows.net/;SharedAccessKeyName=xxxx;SharedAccessKey=xxxx=;EntityPath=desteh",
                                              "adl2_destination_oauth2_clientid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                                              "adl2_destination_oauth2_clientsecret": "xxxx=",
                                              "adl2_destination_oauth2_tenantid": "xxxx=",
                                              "adl2_destination_cs": "abfss://<file-system-name>@<storage-account-name>.dfs.core.windows.net/folder1",
                                          })})

  • 写回答

1条回答 默认 最新

  • dshtze500055 2019-05-07 13:11
    关注

    I'm not sure why it generates a pointer to an interface, but can still assign to it by explicitly casting your map to interface{} and then taking the address of that:

    notebook_spec_secrets := map[string]string{
        "eventhub_source_cs":                   "1",
        "eventhub_destination_cs":              "2",
        "adl2_destination_oauth2_clientid":     "3",
        "adl2_destination_oauth2_clientsecret": "4",
        "adl2_destination_oauth2_tenantid":     "5",
        "adl2_destination_cs":                  "6",
    }
    
    var nssi interface{} = notebook_spec_secrets
    definition.NotebookSpec = &nssi
    

    https://play.golang.org/p/rHrMH_jF_oS

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格