Аргументы командной строки после EXE

#go #arguments

#Вперед #аргументы

Вопрос:

У меня есть мой скрипт «file.go», созданный с помощью «go build file.go», теперь у меня есть «file.exe «

В коде у меня есть «steamid : = xxxxxxxxxxxxxxxxxx», есть ли он в любом случае при выполнении file.exe в cmd , например «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 amp; 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(amp;SteamID, "steamid", "XXXXXXXXXXXXXXXXX", "17 Numbers SteamID")
}

func main() {
    steamid := amp;SteamID

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

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

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

Ошибка:

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

Комментарии:

1. Загляните в пакет ОС .

2. Как я предлагал в своем ответе, если вы хотите использовать steamid как целое число, вы должны использовать Int64Var вместо StringVar (и объявить SteamID с типом * Int64)

Ответ №1:

пакет флагов, включенный в стандартную библиотеку, делает именно это.

что вам нужно добавить в свой скрипт:

 var SteamID string

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

(если вам нужно получить его как целое число, вместо этого используйте Int64Var)
затем в вашей основной функции добавьте:

 flag.Parse()
  

Это инициализирует значение SteamID

Комментарии:

1. Я заметил, что у вас было amp;steamID , что должно быть amp;SteamID

2. Ответ кода под первым сообщением

Ответ №2:

Все это в сообщении об ошибке. Вы не можете выполнять побитовые операции со строками, указателями на строки или чем-либо, что не является целым числом, вам нужно сначала преобразовать или проанализировать их в целые числа. Используйте strconv.parseInt и его друзей из strconv пакета для разбора строк.

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