Saya mencoba mengonversi string yang dikembalikan dari flag.Arg(n)
ke int
. Apa cara idiomatis untuk melakukan ini di Go?
string
go
type-conversion
Matt Joiner
sumber
sumber
func main() { ... }
tidak mengambil argumen dan tidak mengembalikan nilai. Gunakan fungsios
paketExit
mis.os.Exit(2).
panic(err)
Mengubah string sederhana
Cara termudah adalah menggunakan
strconv.Atoi()
fungsinya.Perhatikan bahwa ada banyak cara lain. Misalnya
fmt.Sscan()
danstrconv.ParseInt()
yang memberikan fleksibilitas lebih besar karena Anda dapat menentukan basis dan bitsize misalnya. Juga seperti yang tercantum dalam dokumentasistrconv.Atoi()
:Berikut ini contoh menggunakan fungsi yang disebutkan (coba di Go Playground ):
Output (jika dipanggil dengan argumen
"123"
):Parsing string Kustom
Ada juga yang berguna
fmt.Sscanf()
yang memberikan fleksibilitas lebih besar karena dengan string format Anda dapat menentukan format angka (seperti lebar, basis dll) bersama dengan karakter tambahan tambahan dalam inputstring
.Ini bagus untuk parsing string kustom yang memegang nomor. Misalnya, jika input Anda diberikan dalam bentuk di
"id:00123"
mana Anda memiliki awalan"id:"
dan jumlahnya ditetapkan 5 digit, diisi dengan nol jika lebih pendek, ini sangat mudah diurai seperti ini:sumber
ParseInt
ditentukan argumen kedua ?strconv.ParseInt()
link di dan Anda akan melihat langsung:ParseInt(s string, base int, bitSize int)
. Jadi itulah dasarnya: "ParseInt menginterpretasikan sebuah string dalam basis yang diberikan (2 hingga 36)"int
diperlukan danstrconv.ParseInt()
digunakan, konversi tipe manual diperlukan (dariint64
menjadiint
).Berikut adalah tiga cara untuk mengurai string menjadi bilangan bulat, dari runtime tercepat ke yang paling lambat:
strconv.ParseInt(...)
tercepatstrconv.Atoi(...)
masih sangat cepatfmt.Sscanf(...)
tidak terlalu cepat tetapi paling fleksibelBerikut ini adalah tolok ukur yang menunjukkan waktu penggunaan dan contoh untuk setiap fungsi:
Anda dapat menjalankannya dengan menyimpan sebagai
atoi_test.go
dan menjalankango test -bench=. atoi_test.go
.sumber
Coba ini
sumber
Jika Anda mengontrol data input, Anda dapat menggunakan versi mini
opsi tercepat (tulis cek Anda jika perlu). Hasil:
sumber