热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为Go生成多个Thrift文件的正确方法

如何解决《为Go生成多个Thrift文件的正确方法》经验,为你挑选了1个好方法。

所以我有以下文件

/src/baseService.thrift
    /baseTypes.thrift
    /baseSecurity.thrift

我希望将所有这些thrift定义创建到一个库中.因此,每个文件的顶部是:

baseService.thrift
==================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar

import "baseTypes.thrift"

baseTypes.thrift
================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar

baseSecurity.thrift
===================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar

import "baseTypes.thrift"

问题是,如何将所有这些创建到一个lib包中?它适用于java/cpp/js但是当我尝试构建时,它是不行的.

有了节俭,你不能做thrift gen:baz *.thrift,你必须一次做一个文件.对于其他语言,我们只做一个:

for f in `find *.thrift`; do
   thrift -o myGenDir --gen go $f"
done

(用每个lang替换相应的gen命令)

对于Python来说这很好,因为它根据文件名[即foo/bar/{filename} /ttypes.py]将每个gen文件放在它自己的dir中.对于Java,它会转储foo/bar /中的所有文件,但每个类名都是唯一的.对于cpp,它将所有内容转储到gen目录中,但每个thrift文件[so {filename.h},{filename.cpp}]唯一命名.但是对于Go,它会将所有内容转储到foo/bar中,如下所示:

/foo/bar/constants.go
/foo/bar/service.go
/foo/bar/service-remote/
/foo/bar/baz/  [for anything that has a namespace of foo.bar.baz]
/foo/bar/ttypes.go

问题是,ttypes.go和(大概)constants.go被for循环中的最后一行所覆盖.有没有解决的办法?它适用于其他语言 - 似乎是对Go的疏忽.我错过了什么 我们有很多Thrift文件,里面有很多东西 - 我宁愿不必将同一个包级别的所有内容组合成一个thrift文件.



1> JensG..:

问题是,ttypes.go和(大概)constants.go被for循环中的最后一行所覆盖.

是的,这是真的.

有没有解决的办法?

最(跨语言)的便携式建议是不要这样做.代替:

将不同的IDL文件放入不同的命名空间

将属于一个名称空间的所有内容放入一个IDL文件中

Thrift编译器为Go提供了一些编译器开关,它们可以至少部分地帮助您(通过thrift --help在命令提示符下键入来获得所有语言的所有可用选项)

 go (Go):
   package_prefix=  Package prefix for generated files.
   thrift_import=   Override thrift package import path (default:git.apache.org/thrift.git/lib/go/thrift)
   package=         Package name (default: inferred from thrift file name)

这些选项的使用方式类似于

 thrift -gen go:package=mypack,package_prefix=myprefix

它适用于其他语言 - 似乎是对Go的疏忽.

这可能是您的印象,但如果您对跨语言兼容性感兴趣,我建议您不要尝试.行为与其他语言相同.就像一个例子:我最近修复(或更好地:解决)Erlang测试的一个问题,我必须在这个问题上完全解决这个问题.


推荐阅读
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 短视频app源码,Android开发底部滑出菜单首先依赖三方库implementationandroidx.appcompat:appcompat:1.2.0im ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • C语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ... [详细]
  • 本文描述了在使用 TexStudio 编辑 LaTeX 时插入算法伪代码块时遇到的“Missing \endcsname inserted. \While”错误,并提供了详细的解决方案。 ... [详细]
  • 本文将详细介绍如何在Android Studio中导入和编译OSChina Android 2.4版本的源码。包括所需软件、下载地址以及一些注意事项。 ... [详细]
  • 本文详细介绍如何使用Netzob工具逆向未知通信协议,涵盖从基本安装到高级模糊测试的全过程。通过实例演示,帮助读者掌握Netzob的核心功能。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
author-avatar
的士发个火
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有