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

go 有什么好的类似 Java jar 包方案

  •  
  •   momowei · Aug 22, 2025 · 4757 views
    This topic created in 445 days ago, the information mentioned may be changed or developed.

    就是想把项目里部分核心代码封装起来,不能直接查看源码,然后把项目源码交付给别人,别人可以类似引用 java jar 包方式本地编译开发和打包。 并不需要很高级别的代码保护,只是想不能直接简单查看部分源码

    16 replies  •  2025-08-25 19:10:02 +08:00
    nekoneko
    nekoneko
    Aug 22, 2025
    1
    不能, 没有.
    java 也没有方法不让看源码.
    momowei
    momowei
    OP
    Aug 22, 2025
    2
    @nekoneko jar 没办法直接用记事本看源码把,只是很容易反编译很好还原而已
    darkway
    darkway
    Aug 22, 2025
    3
    可以把 go 文件打包成 zip ,然后后缀改成 jar
    touchwithe
    touchwithe
    Aug 22, 2025 via iPhone
    4
    编译成.lib 动态链接库
    danbai
    danbai
    PRO
    Aug 22, 2025
    5
    编译成 lib 库或者 wasm
    doraemonki
    doraemonki
    Aug 22, 2025
    6
    理论上可以提供混淆后的源码,像这个库一样 https://github.com/unidoc/unipdf
    v1
    v1
    Aug 22, 2025
    7
    jar 在 go 里面对应的是 package (.a 后缀) 静态链接

    ```
    // print.go
    package staticpkg

    import "fmt"

    func Hello() {
    fmt.Println("hello")
    }

    //main.go
    package main

    import (
    "staticpkg"
    )

    func main() {
    staticpkg.Hello()
    }
    ```

    使用 tool 的 compile 命令编译
    go tool compile -o print.a print.go

    使用 tool 的 link 命令生成可执行文件
    go tool link -o main.exe -L [print.a_dir] main.go

    会生成一个 main.exe 程序,直接运行会输出 hello

    如果直接 go run main.go 此时没有任何输出
    seers
    seers
    Aug 23, 2025 via iPhone
    8
    dll 或者 so 呗,动态链接库,还能混淆下
    ChunkitAu
    ChunkitAu
    Aug 23, 2025
    9
    https://github.com/burrowers/garble
    目前项目在使用该工具混淆代码。
    LitterGopher
    LitterGopher
    Aug 23, 2025
    10
    1. 以動態庫的方式提供調用(.dll .a .so .dylib)
    2. 以 RPC 的方式提供調用(本地服務或遠程服務皆可)
    3. 代碼混淆
    gongym
    gongym
    Aug 23, 2025
    11
    你可以试试搜索 go plugin 模式,可以导出库然后动态引入调用
    azraeljack
    azraeljack
    Aug 23, 2025
    12
    go plugin 就行了,核心模块封装成 plugin 然后加载调用就行了。不过环境坑会有点多,比如 glibc 版本不一致可能会导致跑不起来之类的。建议弄到容器里跑。
    visper
    visper
    Aug 25, 2025
    13
    jar 包不是直接 jd 反编译看源码么?
    bli22ard
    bli22ard
    Aug 25, 2025
    14
    java 为什么可以打 jar 包供其他程序调用,因为 Java 跨平台,你只要一个 jar 包,就能在其他所有平台使用。但是 go 不一样,编译产物是和平台完全对应的,所以,你不能为所有平台提供同一个 go 的编译产物,而要为所有平台都提供编译产物,然后就是链接阶段的动态链接还是静态链接了。
    zhengfan2016
    zhengfan2016
    Aug 25, 2025 via Android
    15
    @doraemonki 居然还有这种,这种要是国人写的 v2 和 issue 早被喷烂了吧
    AkinoKaedeChan
    AkinoKaedeChan
    Aug 25, 2025
    16
    如果考虑跨平台就 WASM
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4166 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 09:34 · PVG 17:34 · LAX 01:34 · JFK 04:34
    ♥ Do have faith in what you're doing.