Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bina perduaan percubaan atau komersial dan ubah tingkah laku masa jalan dengan sewajarnya

Bina perduaan percubaan atau komersial dan ubah tingkah laku masa jalan dengan sewajarnya

王林
王林ke hadapan
2024-02-09 13:39:08927semak imbas

Bina perduaan percubaan atau komersial dan ubah tingkah laku masa jalan dengan sewajarnya

php小编小新教你如何构建试用或商业二进制文件,并相应地更改运行时行为。无论是为了保护软件版权,还是为了提供试用版,构建二进制文件是一个重要的步骤。通过更改运行时行为,可以实现一些功能的限制或控制。本文将介绍构建二进制文件的基本步骤,并给出一些常见的运行时行为修改示例。跟随本文,你将掌握构建二进制文件的技巧,为你的软件产品增添更多的价值和保护。

问题内容

构建

我有这个 Makefile 来构建一个二进制文件供试用商业使用:

BINARY_NAME=App.exe
 
trial:
    ENV_BUILD=trial go build -o ${BINARY_NAME}

comme:
    ENV_BUILD=comme go build -o ${BINARY_NAME}

clean:
    go clean
    rm ${BINARY_NAME}

prepare:
    go mod tidy

源代码

在我的源代码中,我有一个断言试用商业限制的源代码:

<code>package permit

import "fmt"

func Trial() (bool, error) {
    fmt.Println("You are using a limited trial release.")
    // ...
    // Assert limitations...
}

func Comme() (bool, error) {
    fmt.Println("You are using the unlimited commercial release.")
    // ...
}
</code>

我计划在运行时调用上述两个函数,如下所示:

<code>package main

import "permit"

    // ...

    var builtTrial bool // TODO: Best way to detect if the built has been trial
    var builtComme bool // TODO: Best way to detect if the built has been commercial

    if builtTrial {
        permitted, err := permit.Trial()
    } else if builtComme {
        permitted, err := permit.Comme()
    }

    // ...
</code>

问题

在运行时检测二进制文件是构建为试用还是商业的最佳实践是什么?我觉得我不知道可用的标准工具来做到这一点。

解决方法

最终,我继续使用 Go 构建标签方法:

文件 permit\build_Trial.go:

<code>//go:build trial

package permit

var buildType = "trial"
</code>

文件 permit\build_commercial.go:

<code>//go:build commercial

package permit

var buildType = "commercial"
</code>

然后,我可以有这样的语句:

<code>package permit

// ...

    if buildType == "trial" {
        fmt.Println("You are using a limited trial release.")
        return nil
    } else if buildType == "commercial" {
        fmt.Println("You are using the unlimited commercial release.")
        return nil
    } else {
        return fmt.Errorf("build type is neither trial nor commercial.")
    }
</code>

最终的Makefile为:

BINARY_NAME=App.exe
 
trial:
    go build -tags trial -o ${BINARY_NAME}

commercial:
    go build -tags commercial -o ${BINARY_NAME}

clean:
    go clean
    rm ${BINARY_NAME}

prepare:
    go mod tidy

Atas ialah kandungan terperinci Bina perduaan percubaan atau komersial dan ubah tingkah laku masa jalan dengan sewajarnya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam