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

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

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

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

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

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

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

    1. RPC 这个是完完全全的方案,而且还涉及到旧代码屎山
    2. 编译 Go 直接 Python 调用
    Leigg
        24
    Leigg  
       Nov 17, 2020 via iPhone
    你想加班吗?
    zzzzzzggggggg
        25
    zzzzzzggggggg  
       Nov 17, 2020
    闲的。。。
    aincvy
        26
    aincvy  
       Nov 17, 2020
    方案一: 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
        27
    zzlettle  
    OP
       Nov 17, 2020
    是不是 rpc 比较适合简单的整合。
    感觉可能适合我。
    Hanggi
        28
    Hanggi  
       Nov 17, 2020   ❤️ 1
    Go 写业务怎么蛋疼了?如果无法用 Go 写业务建议去掉 Go,因为你不需要它。

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

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