Rumah >pembangunan bahagian belakang >Golang >Argumen integer dengan sifar pendahuluan dihuraikan sebagai perlapanan mengikut bendera.IntVar atau flag.Int
editor php Yuzai memperkenalkan: Dalam bahasa Go, parameter baris arahan boleh dihuraikan melalui pakej bendera. Apabila kita menggunakan flag.IntVar atau flag.Int untuk menghuraikan hujah integer dengan sifar pendahuluan, mereka menghuraikannya sebagai perlapanan. Ini bermakna jika kita memasukkan hujah integer bermula dengan 0 pada baris arahan, ia akan dihuraikan sebagai nombor perlapanan, bukan nombor perpuluhan. Ini adalah sesuatu yang perlu diberi perhatian kerana kadangkala kita mungkin mahu mengendalikan hujah sebagai nombor perpuluhan dan bukannya nombor perlapanan. Oleh itu, apabila menggunakan pakej bendera untuk menghuraikan parameter, perhatian khusus perlu diberikan kepada cara parameter integer dengan sifar pendahuluan dihuraikan.
Saya menulis kod ini:
package main import "fmt" import "flag" func main() { var i int flag.intvar(&i, "i", 0, "help") flag.parse() if i < 9 { fmt.println("i < 9") } fmt.println(i) }
Apabila saya menjalankan arahan ini:
./a -i 10 10
Keluaran adalah betul.
Tetapi kenapa jika saya menggunakan 010
运行它,golang 会将 010
解析为八进制(010
== 8
)?
./a -i 010 i < 9 8
Adakah ini pepijat?
Oh, ini perangkap yang dahsyat.
Adakah ini pepijat?
Ia ditambah dengan sengaja sebelum Go 1.0.0 pada tahun 2011. p> Bendera: Membenarkan input bendera integer heksadesimal dan perlapanan.
Anda boleh mencari gelagat penuh dalam dokumentasi untuk
strconv.ParseInt
, dan bukannya penggunaannya dalam bendera
nya yang didokumenkan. strconv.ParseInt
的文档中找到完整的行为,而不是它的flag
Atas ialah kandungan terperinci Argumen integer dengan sifar pendahuluan dihuraikan sebagai perlapanan mengikut bendera.IntVar atau flag.Int. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!