Rumah >pembangunan bahagian belakang >Golang >Argumen integer dengan sifar pendahuluan dihuraikan sebagai perlapanan mengikut bendera.IntVar atau flag.Int

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

王林
王林ke hadapan
2024-02-08 21:10:08629semak imbas

带有前导零的整数参数由 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)
}

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?


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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam