Golang - 有一个bcadd / bcsub包吗?

Is there a package in golang similar to the PHP functions bcsub, bcadd etc.?

I am trying to write the following function from php to golang.

function convertToSteamID($communityID) {
    // See if the second number in the steamid (the auth server) is 0 or 1. Odd is 1, even is 0
    $authserver = bcsub($communityID, '76561197960265728') & 1;
    // Get the third number of the steamid
    $authid = (bcsub($communityID, '76561197960265728')-$authserver)/2;
    // Concatenate the STEAM_ prefix and the first number, which is always 0, as well as colons with the other two numbers
    return "STEAM_0:$authserver:$authid";
}

You can do it using big.Int:

var (
    magic, _ = new(big.Int).SetString("76561197960265728", 10)
    one      = big.NewInt(1)
    two      = big.NewInt(2)
)

func commIDToSteamID(ids string) string {
    id, _ := new(big.Int).SetString(ids, 10)
    id = id.Sub(id, magic)
    isServer := new(big.Int).And(id, one)
    id = id.Sub(id, isServer)
    id = id.Div(id, two)
    return "STEAM_0:" + isServer.String() + ":" + id.String()
}

func steamIDToCommID(ids string) string {
    p := strings.Split(ids, ":")
    id, _ := new(big.Int).SetString(p[2], 10)
    id = id.Mul(id, two)
    id = id.Add(id, magic)
    auth, _ := new(big.Int).SetString(p[1], 10)
    return id.Add(id, auth).String()
}

playground

  • edit: added the reverse function as well