Golang:如何将命令行参数转换为整数?

时间:2014-06-20 03:09:02

标签: algorithm sorting go type-conversion command-line-arguments

我想创建一个脚本,对用户提供的参数进行插入排序,如下所示:

    $ insertionSort 1 2 110 39

我希望它能够回归:

    [1 2 39 110]

但它返回:

    [1 110 2 39]

我认为这是因为os.Args数组中的元素是字符串。所以,我的问题是如何将os.Args数组的元素转换为整数?这是我的代码:

    package main

    import (
        "fmt"
         "os"
         "reflect"
         "strconv"
    )

    func main() {
        A := os.Args[1:]

        for i := 0; i <= len(A); i++ {
          strconv.Atoi(A[i])
          fmt.Println(reflect.TypeOf(A[i]))
        }

         for j := 1; j < len(A); j++ {
             key := A[j]
             i := j - 1
             for i >= 0 && A[i] > key {
               A[i+1] = A[i]
               i = i - 1
               A[i+1] = key
             }
          }
        fmt.Println(A)
    }

作为一个抬头,当我替换

     strconv.Atoi(A[i])

有关

     A[i] = strconv.Atoi(A[i])

我收到以下错误:

    ./insertionSort.go:14: multiple-value strconv.Atoi() in single-value context

感谢您的时间!

1 个答案:

答案 0 :(得分:6)

Atoi返回

中的数字和错误(或零)
  

ParseInt解释给定基数(2到36)中的字符串s并返回相应的值i。如果base == 0,则字符串的前缀暗示基数:&#34; 0x&#34;的基数为16,&#34; 0&#34;的基数为8,否则为10的基数。

     

bitSize参数指定结果必须适合的整数类型。位大小0,8,16,32和64对应于int,int8,int16,int32和int64。

     

ParseInt返回的错误具有具体类型* NumError并包含err.Num = s。如果s为空或包含无效数字,则err.Err = ErrSyntax且返回值为0; 如果对应于s的值不能用给定大小的有符号整数表示,则err.Err = ErrRange和返回值是相应bitSize和sign的最大幅度整数。

你需要这样做:

var err error
nums := make([]int, len(A))
for i := 0; i < len(A); i++ {
    if nums[i], err = strconv.Atoi(A[i]); err != nil {
        panic(err)
    }
    fmt.Println(nums[i])
}

工作示例:http://play.golang.org/p/XDBA_PSZml