The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
zzlettle

go 写网络基础, Python 写逻辑,两种语言如何结合写项目?

  •  
  •   zzlettle · Nov 17, 2020 · 6055 views
    This topic created in 2184 days ago, the information mentioned may be changed or developed.
    最近开发一个后端服务器,游戏的
    GO 比较适合来写网络交互的
    但是写逻辑比较蛋疼
    python 这样的语言适合写逻辑
    所以想看看有什么方法把两种语言在项目中混合起来开发
    但是以前没有做过,没有经验
    大家有做过类似项目的,能指点下吗
    32 replies  •  2020-11-27 17:59:58 +08:00
    liujavamail
    liujavamail
    Nov 17, 2020
    1
    grpc
    anUglyDog
    anUglyDog
    Nov 17, 2020❤️2
    2
    别折腾!别折腾!别折腾!
    misaka19000
    misaka19000
    Nov 17, 2020
    3
    Unix domain socket
    PureWhiteWu
    PureWhiteWu
    Nov 17, 2020
    4
    游戏后端服务器,用 Python……认真的么……
    a554340466
    a554340466
    Nov 17, 2020 via iPhone
    5
    c++ + lua
    xx6412223
    xx6412223
    Nov 17, 2020
    6
    这么做就是自己把自己搞死
    index90
    index90
    Nov 17, 2020
    7
    rpc 要做多一次序列化和反序列化,如此浪费不可取

    可以考虑一下 go 编译成动态库,然后在 python 里面用
    joesonw
    joesonw
    Nov 17, 2020
    8
    golang skylark

    skylark 是 babel 用的语言, 是 python 的 subset. 如果只是写逻辑的话可以试一试, 做个 benchmark 看一看
    joesonw
    joesonw
    Nov 17, 2020
    9
    @joesonw 修正, babel -> bazel
    Kamiyu0087
    Kamiyu0087
    Nov 17, 2020
    10
    不会 GO 也不会 Python 的能问下为啥 Python 更适合写逻辑?
    TypeError
    TypeError
    Nov 17, 2020
    11
    静态类型语言➕动态脚本嵌入,应该是游戏服务器主流做法吧
    某个挺出名的游戏后端框架 skynet 就是这么做的
    可以参考楼上说的 skylark
    QingXuJiaZhi
    QingXuJiaZhi
    Nov 17, 2020
    12
    @Kamiyu0087 动态语言、鸭子类型,写业务逻辑是可以很爽,更何况 Go 目前还没有泛型,因此 Go 写业务会有点麻烦。

    但话又说回来,动态语言如果不认真写 unittest, 维护起来就很容易出问题了,因此也有人说 “动态一时爽,重构火葬场”,就是这个意思。
    qieqie
    qieqie
    Nov 17, 2020
    13
    cgo
    c shared library
    python ctypes
    觉得 ctypes 写着麻烦的话也有通过 header 自动生成的工具
    xulolololololo
    xulolololololo
    Nov 17, 2020
    14
    不知道你要什么级别的性能,python asyncio 异步协程已经很成熟,现在瓶颈一般都是网络 io 和数据库 io 了吧
    paoqi2048
    paoqi2048
    Nov 17, 2020
    15
    @PureWhiteWu 🐷用 Python 的
    paoqi2048
    paoqi2048
    Nov 17, 2020
    16
    带 gc 的 Python 调用带 gc 的 Go 提供的库,这样不太稳吧?
    ytymf
    ytymf
    Nov 17, 2020
    17
    @PureWhiteWu 网易有话说。。
    est
    est
    Nov 17, 2020
    18
    你以为的性能问题:网络处理能力不行

    实际上的性能问题:DB 存取和外部 IO 一塌糊涂
    a719114136
    a719114136
    Nov 17, 2020
    19
    比较成熟的方案就 rpc 。不过同意楼上的别折腾,老老实实用 go 吧
    xuanbg
    xuanbg
    Nov 17, 2020
    20
    Python 写游戏?楼主你是认真的吗?
    magiclz233
    magiclz233
    Nov 17, 2020
    21
    为啥不直接都用 go 呢,业务用 python 的好处是啥,go+python 比纯 go 的优点在哪
    Vegetable
    Vegetable
    Nov 17, 2020
    22
    绝大部分性能损耗在逻辑上,这么做没意义,你想做的可能是中台?中间件?
    PEIENYKYK
    PEIENYKYK
    Nov 17, 2020
    23
    现在就在这么开发项目,说一下我的处理逻辑吧

    1. RPC 这个是完完全全的方案,而且还涉及到旧代码屎山
    2. 编译 Go 直接 Python 调用
    Leigg
    Leigg
    Nov 17, 2020 via iPhone
    24
    你想加班吗?
    zzzzzzggggggg
    zzzzzzggggggg
    Nov 17, 2020
    25
    闲的。。。
    aincvy
    aincvy
    Nov 17, 2020
    26
    方案一: go 调用 python 代码。
    参考项目: https://github.com/sbinet/go-python

    方案二:python 调用 go 的模块
    参考阅读: https://cloud.tencent.com/developer/article/1568553
    http://chingchuan-chen.github.io/posts/201804/2018-04-16-python-call-go.html

    方案三:c/c++ 调用 go && python
    1. 把 go 项目编译成动态链接库。
    2. c/c++ 调用上一步生成的动态链接库, 外加调用 python 的库,建立 python 的脚本环境。
    3. 可能还需要做一个桥 链接两个项目的接口。
    zzlettle
    zzlettle
    OP
    Nov 17, 2020
    27
    是不是 rpc 比较适合简单的整合。
    感觉可能适合我。
    Hanggi
    Hanggi
    Nov 17, 2020❤️1
    28
    Go 写业务怎么蛋疼了?如果无法用 Go 写业务建议去掉 Go,因为你不需要它。

    不要为了用 Go 而用,用了 Go 基本就不太需要其他语言了,
    你去看看几个排名靠前的 Go 开源项目,基本都是纯 Go,
    感觉你的思路没有理清楚,要么纯 Python,要么纯 Go 。

    如果有个别库只有 Python 有,我会开一个 Python 的微服务,用 gprc 调用它。
    freemoon
    freemoon
    Nov 18, 2020
    29
    项目中,go 一般和 C/CPP 结合,没见过和 py 结合的
    zzlettle
    zzlettle
    OP
    Nov 18, 2020
    30
    @Hanggi 好吧,我试试看用纯 GO 来写
    我发现我用 GO 写的项目,基本写的我头昏脑胀,出问题,或者根本不知道问题到底在哪里
    用 python 写的,我都很轻松,很少出问题
    sunshinev
    sunshinev
    Nov 27, 2020
    31
    请关注下 chat.osinger.com 最近写的,在 v2 上也好多朋友去看过
    sunshinev
    sunshinev
    Nov 27, 2020
    32
    @sunshinev 前端 Vue+canvas+websocket+protobuf,后端 Golang+websocket+protobuf+goroutine
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4518 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 01:22 · PVG 09:22 · LAX 17:22 · JFK 20:22
    ♥ Do have faith in what you're doing.