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

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

  •  
  •   momowei · 13 天前 · 2791 次点击

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

    16 条回复    2025-08-25 19:10:02 +08:00
    nekoneko
        1
    nekoneko  
       13 天前
    不能, 没有.
    java 也没有方法不让看源码.
    momowei
        2
    momowei  
    OP
       13 天前
    @nekoneko jar 没办法直接用记事本看源码把,只是很容易反编译很好还原而已
    darkway
        3
    darkway  
       13 天前
    可以把 go 文件打包成 zip ,然后后缀改成 jar
    touchwithe
        4
    touchwithe  
       13 天前 via iPhone
    编译成.lib 动态链接库
    danbai
        5
    danbai  
    PRO
       13 天前
    编译成 lib 库或者 wasm
    doraemonki
        6
    doraemonki  
       13 天前
    理论上可以提供混淆后的源码,像这个库一样 https://github.com/unidoc/unipdf
    kk2syc
        7
    kk2syc  
       13 天前
    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
        8
    seers  
       12 天前 via iPhone
    dll 或者 so 呗,动态链接库,还能混淆下
    ChunkitAu
        9
    ChunkitAu  
       12 天前
    https://github.com/burrowers/garble
    目前项目在使用该工具混淆代码。
    LitterGopher
        10
    LitterGopher  
       12 天前
    1. 以動態庫的方式提供調用(.dll .a .so .dylib)
    2. 以 RPC 的方式提供調用(本地服務或遠程服務皆可)
    3. 代碼混淆
    gongym
        11
    gongym  
       12 天前
    你可以试试搜索 go plugin 模式,可以导出库然后动态引入调用
    azraeljack
        12
    azraeljack  
       12 天前
    go plugin 就行了,核心模块封装成 plugin 然后加载调用就行了。不过环境坑会有点多,比如 glibc 版本不一致可能会导致跑不起来之类的。建议弄到容器里跑。
    visper
        13
    visper  
       10 天前
    jar 包不是直接 jd 反编译看源码么?
    bli22ard
        14
    bli22ard  
       10 天前
    java 为什么可以打 jar 包供其他程序调用,因为 Java 跨平台,你只要一个 jar 包,就能在其他所有平台使用。但是 go 不一样,编译产物是和平台完全对应的,所以,你不能为所有平台提供同一个 go 的编译产物,而要为所有平台都提供编译产物,然后就是链接阶段的动态链接还是静态链接了。
    zhengfan2016
        15
    zhengfan2016  
       10 天前 via Android
    @doraemonki 居然还有这种,这种要是国人写的 v2 和 issue 早被喷烂了吧
    AkinoKaedeChan
        16
    AkinoKaedeChan  
       10 天前
    如果考虑跨平台就 WASM
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:20 · PVG 04:20 · LAX 13:20 · JFK 16:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.