我是 Go 新手。目前,我正在 Go 中創建一個菜單,我想驗證用戶輸入的數據類型是否與代碼中定義的變量的數據類型相匹配。到目前為止,我的部分代碼如下所示:package mainimport ( "fmt" "reflect")var option int // The variable is declared outside of the main().func general_menu() { fmt.Println(".......................General Menu..................................") fmt.Println() fmt.Println("Calculator..........................................................1") fmt.Println("Linear algebra package..............................................2") fmt.Println("Language change.....................................................9") fmt.Println("Exit...............................................................10") fmt.Println() fmt.Println("Choose an option from the menu.") fmt.Println() fmt.Scan(&option) fmt.Println() if (option != 1 && option != 2 && option != 9 && option != 10)||reflect.TypeOf(option)!=int{ fmt.Println("Wrong option input. Please, try again.") fmt.Println() general_menu() }}我知道這不起作用,而且我知道“int”不能用作“if”條件的一部分。對于解決此問題的正確方法的任何建議,我將不勝感激。謝謝。編輯:根據貢獻者的建議,我添加了更多代碼。編輯:根據提供的答案,我嘗試實現一個函數,但語法仍然不正確:func check_integers_are_not_string(x int) bool { change := strconv.Itoa(x) if change != nil { return true } else { return false }} // This function returns a true boolean value if conversion from int to string was possible, meaning that the entered value is a string.
2 回答
函數式編程
TA貢獻1807條經驗 獲得超9個贊
只需閱讀 Scan 的文檔 - https://pkg.go.dev/fmt#Scan
它返回成功讀取參數的數量和一個錯誤。在您的情況下,輸入被映射到一個 int 類型的變量,因此如果用戶輸入一個字符串,它將返回 0 和一個錯誤。否則它將返回 1 并且錯誤應該為零。你可以檢查一下。
n, err := fmt.Scan(&option)
if n != 1 || err != nil {
// print error and go back
}
躍然一笑
TA貢獻1826條經驗 獲得超6個贊
一種常見的方法是嘗試進行轉換并查看它是否成功。
optionInt, err := strconv.Atoi(option) // Assuming option is of type string
if err != nil {
log.Printf("String '%s' cannot be converted to type int: %v", option, err)
os.Exit(1)
}
log.Printf(`optionInt is %d.`, optionInt)
如果您只對轉換為一種類型感興趣,這是一種很好的方法。否則,事情可能很快就會變得更加復雜,使用諸如詞法分析器和解析器之類的結構,但這將保證更多關于您正在嘗試完成的信息的信息。
- 2 回答
- 0 關注
- 172 瀏覽
添加回答
舉報
0/150
提交
取消
