Lorsque l'éditeur php Baicao développe des programmes Golang, il rencontre parfois le problème que les paramètres de ligne de commande ne sont pas correctement acceptés comme paramètres. Ce problème peut empêcher le programme de fonctionner correctement ou d'obtenir des données d'entrée correctes. Afin de résoudre ce problème, nous devons vérifier soigneusement la partie traitement des paramètres de ligne de commande du programme pour nous assurer que les paramètres sont correctement reçus et utilisés correctement dans le programme. Cet article présentera quelques causes d'erreur courantes et des solutions pour aider les développeurs à mieux gérer les paramètres de ligne de commande.
Je suis nouveau sur Golang et je suis un tutoriel en ligne sur la création d'une application de quiz simple à l'aide d'un terminal de ligne de commande. Cependant, lorsque j'exécute le code sur ma machine, après la première question, les questions restantes arrivent par paires et elle n'accepte plus ma réponse pour chaque question.
Exemple de capture d'écran :
Le processus du programme est très simple -
le fichier csv est également très court -
70+22,92 63+67,130 91+72,163 74+61,135 81+6,87
Voici le programme complet -
package main import ( "encoding/csv" "flag" "fmt" "os" "time" ) func main() { // 1. input the name of the file fName := flag.String("f", "quiz.csv", "path of csv file") // 2. set the duration of timer timer := flag.Int("t", 30, "timer for the quiz") flag.Parse() // 3. pull the problems from the file (calling our problem puller) problems, err := problemPuller(*fName) // 4. handle the error if err != nil { exit(fmt.Sprintf("something went wrong: %s", err.Error())) } // 5. create a variable to count our correct answers correctAns := 0 // 6. using the duration of the timer, we want to initialize the timer tObj := time.NewTimer(time.Duration(*timer) * time.Second) ansC := make(chan string) // 7. loop through the problems, print the questions, we'll accept the answers problemLoop: for i, p := range problems { var answer string fmt.Printf("Problem %d: %s =", i+1, p.question) go func() { fmt.Scanf("%s", &answer) ansC <- answer }() select { case <- tObj.C: fmt.Println() break problemLoop case iAns := <- ansC: if iAns == p.answer { correctAns++ } if i == len(problems)-1 { close(ansC) } } } // 8. calculate and print out the result fmt.Printf("Your result is %d out of %d\n", correctAns, len(problems)) fmt.Printf("Press enter to exit") <- ansC } func problemPuller(fileName string) ([]problem, error) { // read all the problems from the quiz.csv // 1. open the file if fObj, err := os.Open(fileName); err == nil { // 2. we will create new reader csvR := csv.NewReader(fObj) // 3. it will need to read the file if cLines, err := csvR.ReadAll(); err == nil { // 4. call the parseProblem function return parseProblem(cLines), nil } else { return nil, fmt.Errorf("error in reading data in csv from %s file; %s", fileName, err.Error()) } } else { return nil, fmt.Errorf("error in opening the file %s file; %s", fileName, err.Error()) } } func parseProblem(lines [][]string) []problem { // go over the lines and parse them based on the problem struct r := make([] problem, len(lines)) for i := 0; i < len(lines); i++ { r[i] = problem { question: lines[i][0], answer: lines[i][1], } } return r } type problem struct { question string answer string } func exit(msg string) { fmt.Println(msg) os.Exit(1) }
J'ai essayé chaque ligne de code mais je n'arrive pas à la résoudre. Quelqu'un peut-il signaler ce que je fais de mal ?
Je peux reproduire le problème sous Windows (exécuté sous 命令提示符
). Mais sous Linux, il n'y a aucun problème.
Les modifications suivantes résoudront le problème :
go func() { - fmt.Scanf("%s", &answer) + fmt.Scanln(&answer) ansC <- answer }()
Il s'agit d'un problème connu, signalé sous le nom fmt : scanf fonctionne différemment sous Windows et Linux #23562 Il y a un autre correctif en attente. Malheureusement, cl a des commentaires non résolus et est bloqué depuis longtemps.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!