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 · 12 天前 · 2773 次点击

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

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