2012-12-16 25 views
5

Ngay bây giờ tôi đang làm những điều sau đây để phân tích một số nguyên từ một chuỗi và sau đó chuyển nó sang int loại:Tìm kiếm một cách thanh lịch để phân tích một Integer

tmpValue, _ := strconv.ParseInt(str, 10, 64) //returns int64 
finalValue = int(tmpValue) 

Nó là khá dài dòng, và chắc chắn không đẹp, vì tôi chưa tìm thấy cách thực hiện chuyển đổi trong cuộc gọi ParseInt. Có cách nào tốt hơn để làm điều đó không?

Trả lời

5

Có vẻ như chức năng strconv.Atoi làm những gì bạn muốn, ngoại trừ việc nó hoạt động bất kể kích thước bit của int (mã của bạn dường như giả định nó rộng 64 bit).

3

Nếu bạn phải viết điều đó một lần trong chương trình của mình thì tôi thấy không có vấn đề gì. Nếu bạn cần tại một số nơi bạn có thể viết một wrapper chuyên môn đơn giản, ví dụ:

func parseInt(s string) (int, error) { 
     i, err := strconv.ParseInt(str, 10, 32) // or 64 on 64bit tip 
     return int(i), err 
} 

Các thư viện chuẩn không nhằm mục đích cung cấp các API (cồng kềnh) cho tất cả các loại số càng tốt và/hoặc sự kết hợp của họ.

+0

tôi lấy sự tự do loại bỏ các 'tranh luận base', mà đã không được sử dụng. Nếu không, +1. –

+0

Ồ, đúng. Cảm ơn! ;-) – zzzz

+0

Trên thực tế, điểm về "bloated APIs" hơi lệch, vì trường hợp cụ thể này * được * bao phủ bởi 'strconv.Atoi'. –

2

Đừng quên kiểm tra lỗi. Ví dụ,

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 
    s := "123" 
    i, err := strconv.Atoi(s) 
    if err != nil { 
     fmt.Println(err) 
     return 
    } 
    fmt.Println(i) 
} 

Output:

123 
Các vấn đề liên quan