V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
florentino
V2EX  ›  Go 编程语言

使用 golang 可以开发一套监控系统吗

  •  
  •   florentino · 31 天前 · 3456 次点击

    最近接了个活,主要是给 FSU 动环监控单元白盒(芯片:NUC980,内存:128MB),开发一套监控软件,可以采集接在白盒上面的各种 DI,AI 设备的数据,并且上报到监控中心

    查询了下,FSU 系统,好像都是通过 C/C++ 写的,可是我不太会,但是我会一点 golang 写,查询了下,golang 好像可以用于嵌入式开发

    就想问下有没有使用过 golang 开发过类似的软件的,以及使用 golang 会不会有什么坑

    34 条回复    2024-10-28 14:13:38 +08:00
    wangritian
        1
    wangritian  
       31 天前
    不懂这块业务,但 go 可以读取 dll 或 so ,通过 cgo 调用 c 函数
    sampeng
        2
    sampeng  
       31 天前   ❤️ 2
    如果连 link 都不明白的是大概率没戏的。
    hefish
        3
    hefish  
       31 天前   ❤️ 2
    行肯定是行的,但入 2 楼大佬所讲, 怎么也得知道点嵌入式的东西吧。 不然肯定有困难啊。。
    实际 python ,php 都行啊。。。go 自然也行。
    crackidz
        4
    crackidz  
       31 天前
    FsuOS 不行吧,它支持的是各种驱动,有 Python 支持但限设备
    guanzhangzhang
        5
    guanzhangzhang  
       31 天前
    prometheus 的 metrics ,
    你的白盒上运行 node_exporter 或者自己开发个
    qq316107934
        6
    qq316107934  
       31 天前   ❤️ 1
    128MB 内存用 Golang 太容易 OOM 了,不推荐,Golang runtime 对内存分配比较宽松
    florentino
        7
    florentino  
    OP
       31 天前
    @hefish 我说嵌入式可能不准确,这个盒子厂家提供编译好的 Linux 系统, 我只要写软件跑在上面就行, 我的想法是, 解决我的软件与串口之间的通讯,以及如何将数据上报到数据中心(就是中国铁塔的 B 接口)就行了, 担心的点也就是会不会最后我写完了, 跑起来发现系统资源不够,毕竟才 128M 内存
    florentino
        8
    florentino  
    OP
       31 天前
    @qq316107934 我的逻辑比较简单,就是采集数据,上报数据, 没有其他更复杂的逻辑, 想着应该够用吧
    sampeng
        9
    sampeng  
       31 天前
    @florentino 128M 内存居然说是才。。。我看了一眼我手上的 stm32 的板子就 512K 。你别引一堆第三方包,尽量自己维护数据结构,内存都是能算出来的。虚拟机不是个大 sb ,只知道吃完内存才吐。所以要你自己控制和维护。尤其是调用 so 开的口子的时候千万别忘了回收内存之类的。因为大部分的接口都是只是申请了内存,但是释放一定会再给你另一个接口。这是最容易踩的坑。如果你直接是串口+http 。。。。。哪就没 so 啥事了。标准库标准操作。。内存多少都是看得到的。。
    sampeng
        10
    sampeng  
       31 天前   ❤️ 1
    甚至更简单粗暴一点就是内存直接都是纯静态的。比如全局 1k 大的数组。多少内存都是能算出来的。就没 gc 啥事
    yuedanwork
        11
    yuedanwork  
       31 天前   ❤️ 1
    嵌入式这内存够了。。。你这盒子本身功能就不多 要那么大内存干嘛

    至于 Go 能有啥坑 都那么多用的了

    最后,真决定用 Go ,请用 TinyGo
    qq316107934
        12
    qq316107934  
       31 天前
    @florentino #8 少引用第三方 SDK 的话够用的,大不了 OOM 了之后再拉起或者计划性重启。看了下串口通信在 linux 下只需要 syscall 就行了,如果知道协议纯自己写的话,挺方便的,不用引用 so 库。如果要引用的话 cgo 是有点麻烦的,可以看下 SWIG
    scopeccsky1111
        13
    scopeccsky1111  
       31 天前   ❤️ 1
    注意一下处理器架构, 如果引用库的话可能不兼容
    jim9606
        14
    jim9606  
       31 天前 via Android   ❤️ 1
    行肯定是行的,更多是省不省心,例如 golang 并不是一个对 interprop 友好的语言,要引非 golang 的库会比较麻烦。如果你熟悉 golang ,需求又不存在调三方库全部自己写的那就无太大所谓。
    mengzhuo
        15
    mengzhuo  
       31 天前   ❤️ 1
    大概看了下 FsuOS 的文档……好口语化啊……

    不建议你在上面开发了,毕竟 Go 已经开始升级最低要求的 Linux 版本(貌似大于 3.0?),硬要开发的话,可以通过“联通白盒化标准”那里的东西进行采集和上报
    Martens
        16
    Martens  
       31 天前   ❤️ 1
    TinyGo
    florentino
        17
    florentino  
    OP
       31 天前
    @mengzhuo 嗯 不基于他们, 他们也是 C 写的打包成了系统, 我的软件是在 Linux4.9 上面跑, 就是使用 go 语言实现他们类似的功能,采集数据+告警+上报 就行了
    viayie
        18
    viayie  
       31 天前
    @mengzhuo 翻了一眼,同感:

    > "当作为仪表控制器软件时,由于 SMDDevice 只是负载采集告警和控制,具体仪表的业务逻辑还需要一个控制器实现,就是这个。"
    GeekGao
        19
    GeekGao  
       31 天前
    @Martens TinyGo 有内存管理缺陷
    Vitumoc
        20
    Vitumoc  
       31 天前
    要不直接买个能采集动环数据的盒子呢?也不贵来着,肯定比开发便宜
    GeekGao
        21
    GeekGao  
       31 天前
    用 C 实现呗,如果只是读数据、通讯,多简单啊。。。
    florentino
        22
    florentino  
    OP
       31 天前
    @Vitumoc 给我活的人,就是想卖钱的,他咋可能去采购呢 🤣🤣
    mengzhuo
        23
    mengzhuo  
       31 天前
    @florentino 实在有 C 的需求,又想有 Go 的语法,嗯……

    可以用 v ( 80%跟 Go 很像),就是内存管理得自己配置一下。

    https://vlang.io
    NathanInMac
        24
    NathanInMac  
       31 天前
    需求这么简单建议和 AI 一起写会儿 C 就好了
    8355
        25
    8355  
       31 天前
    @florentino #7 要纯原生开发了,github 代码要 copy 出来精简了。
    imes
        26
    imes  
       31 天前   ❤️ 1
    golang 嵌入式,最后还是会回到 cgo 上,那不如一开始就用 c/c++。话又说回来了,嵌入式不用 c/c++,那也得是 rust 顶上,无论如何也轮不到 golang 啊。哪怕是 microopython 和 tiny go ,也都是 demo 尺度上的东西,商业上也没几个人有胆子用。
    yplam
        27
    yplam  
       31 天前 via Android
    nuc980 感觉大概率用 nor flash ,这个反而是瓶颈
    elechi
        28
    elechi  
       30 天前
    如果功能就是你说的那么简单,并且系统中也没有其他程序抢内存,是没有问题的,因为我做过
    elechi
        29
    elechi  
       30 天前   ❤️ 1
    而且也用不到 cgo ,didoaiao 都是文件,go 直接读写文件就行,上传数据都是网络协议了,和 cgo 也没关系
    florentino
        31
    florentino  
    OP
       30 天前
    @elechi #29 感谢 我看看
    higker
        32
    higker  
       30 天前
    建议使用 Java21 + graalvm.org 开发
    anviod
        33
    anviod  
       28 天前   ❤️ 1
    做过, 可行! 可以参考 gobot 项目 https://gobot.io/ 现成的代码示例
    grzhan
        34
    grzhan  
       11 天前
    看需求更接近开发一个上报监控指标的 agent ,逻辑上应该比较简单。
    解决资源问题(内存)可以看下 tinygo ,算是针对嵌入式环境的一个 go 编译器实现,如果没有用不到 go 关键字、反射等特性的话应该问题不大。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1150 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:39 · PVG 02:39 · LAX 10:39 · JFK 13:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.