Argumen integer dengan sifar pendahuluan dihuraikan sebagai perlapanan mengikut bendera.IntVar atau flag.Int

王林
Lepaskan: 2024-02-08 21:10:08
ke hadapan
577 orang telah melayarinya

带有前导零的整数参数由 flag.IntVar 或 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.

Kandungan soalan


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)
}
Salin selepas log masuk

Apabila saya menjalankan arahan ini:

./a -i 10
10
Salin selepas log masuk

Keluaran adalah betul.

Tetapi kenapa jika saya menggunakan 010 运行它,golang 会将 010 解析为八进制(010 == 8)?

./a -i 010
i < 9
8
Salin selepas log masuk

Adakah ini pepijat?


Penyelesaian


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 benderanya 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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!