EXE后的命令行参数

时间:2014-06-24 13:09:44

标签: go arguments

我有我的脚本“file.go”用“go build file.go”构建,现在我有“file.exe”

在代码中我有“steamid:= xxxxxxxxxxxxxxxx”无论如何在cmd中执行file.exe时如“file.exe -steamid = xxxxxxxxxxxxxxxx”

代码:

package main

import (
    "crypto/md5"
    "fmt"
)

func main() {
  steamid := xxxxxxxxxxxxxxxx

    h := md5.New()
    h.Write([]byte("BE"))

    for i := 0; i < 8; i++ {
        h.Write([]byte{byte(steamid & 0xFF)})
        steamid >>= 8
    }

    fmt.Printf("Battleye GUID: %x", h.Sum(nil))
}

我已经在这里得到了新的回复;

package main

import (
    "crypto/md5"
    "fmt"
    "bufio"
    "os"
    "flag"
)

var SteamID string

func init() {
    flag.StringVar(&SteamID, "steamid", "XXXXXXXXXXXXXXXXX", "17 Numbers SteamID")
}

func main() {
    steamid := &SteamID

    h := md5.New()
    h.Write([]byte("BE"))

    for i := 0; i < 8; i++ {
        h.Write([]byte{byte(steamid & 0xFF)})
        steamid >>= 8
    }

    fmt.Printf("Battleye GUID: %x", h.Sum(nil))
    fmt.Print("\nPress 'Enter' to continue...")
    bufio.NewReader(os.Stdin).ReadBytes('\n') 
}

错误:

C:\Go\bin>go build file.go
# command-line-arguments
.\file.go:24: invalid operation: steamid & 255 (mismatched types *string and int)
.\file.go:25: invalid operation: steamid >>= 8 (shift of type *string)

2 个答案:

答案 0 :(得分:2)

标准库中包含的flag package就是这样。

您需要在脚本中添加的内容:

var SteamID string

func init() {
    flag.StringVar(&SteamID, "steamid", "<insert default value>", "<insert help text>")
}

(如果您需要将其作为整数获取,请改用Int64Var) 然后在你的主要功能中添加:

flag.Parse()

这将初始化SteamID

的值

答案 1 :(得分:0)

全部在错误消息中。您不能使用字符串,指向字符串的指针或任何非整数的指针进行按位操作,您需要先将它们转换或解析为整数。使用strconv.ParseInt及其strconv包中的朋友来解析字符串。

parsedID, e := strconv.ParseInt(*steamID, 16, 64)
if e != nil { log.Fatal("couldn't parse the ID") }
// Use parsedID.