#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.