In article <5a5b880d$0$10052$
e4fe...@news.xs4all.nl>,
Luuk <lu...@invalid.lan> wrote:
>Ik heb een poging gedaan om een passwoord input te bouwen, maar die is
>hopeloos gestrand in 'vreemde' (voor mij in ieder geval) golang errors
Tsja, elke taal is vreemd als je er nog nooit wat in gedaan hebt.
Als je wel eens wat met C/C++ gedaan hebt dan is Go wat makkelijker
op te pikken dan als je alleen met script-achtige talen gewerkt
hebt, maar dan nog moet je er vanuit gaan dat je wel een paar
weken moet besteden om het in de vingers te krijgen.
Als je eenmaal Go kent dan typt het makkelijk weg, en er zijn
belachelijk veel Go libraries beschikbaar om bijna alles te doen
wat je wilt, je hoeft dat dan alleen maar aan elkaar te plakken.
Dit imaptar ding is ook niet veel meer dan het aan elkaar lijmen
van de go-imap, archive/tar, en pgzip libraries.
Dat gezegd hebbende, Go is een typt-makkelijk-weg taal, maar is
het ook goed? Als je een serieuze programmeur bent moet je dit lezen:
http://yager.io/programming/go.html
Zelf ben ik nu Rust aan het leren, voor wanneer Go niet voldoet.
En ik ben van plan daarna C/C++ verder volledig te ontwijken.
>In onderstaande is 'main.go.12' de originele 1.2 source, en 'main.go' de
>aangepaste
Oh, "diff -u" asjeblieft :)
>luuk@opensuse:~/tmp/imaptar-1.2> diff --suppress-common-lines main.go
>main.go.12
>34c34
>< //password := flag.String("pass", "", "password")
>---
>> password := flag.String("pass", "", "password")
>38,43c38,40
>< //if *serverName == "" || *userName == "" || *password == "" ||
>*tarfile == "" {
>< // usage()
>< //}
><
>< var password string
>< fmt.Scan(&password)
>---
>> if *serverName == "" || *userName == "" || *password == "" ||
>*tarfile == "" {
>> usage()
>> }
>luuk@opensuse:~/tmp/imaptar-1.2> go build
># _/home/luuk/tmp/imaptar-1.2
>./main.go:68: invalid indirect of password (type string)
>luuk@opensuse:~/tmp/imaptar-1.2>
Password wordt gebruikt in de rest van de code als pointer-naar-string,
niet als string (dat komt door hoe flag.String werkt, die returned
een pointer-naar-string).
Dit had waarschijnlijk wel gewerkt:
var tmp string
fmt.Scan(&tmp)
password := &tmp
... alleen doet fmt.Scan niet wat je wilt als je whitespace in je
password hebt, dus dan moet je iets doen als
b := bufio.NewReader(os.Stdin)
tmp, err := b.ReadString('\n')
if err != nil {
log.Fatal(err)
}
tmp = strings.TrimRight("\r\n")
password := &tmp
(uit m'n hoofd, niet getest)
Maar nog beter, zoals ik al zei, voor bijna alles wat je kan bedenken
heeft iemand al wat gebouwd, dus ik heb wat gezocht en gewoon
https://github.com/bgentry/speakeasy gebruikt.
Mike.