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

Mar*_*iro 2 sorting algorithm type-conversion go command-line-arguments

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

    $ insertionSort 1 2 110 39
Run Code Online (Sandbox Code Playgroud)

我希望它能回归:

    [1 2 39 110]
Run Code Online (Sandbox Code Playgroud)

但它返回:

    [1 110 2 39]
Run Code Online (Sandbox Code Playgroud)

我认为这是因为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)
    }
Run Code Online (Sandbox Code Playgroud)

作为一个抬头,当我替换

     strconv.Atoi(A[i])
Run Code Online (Sandbox Code Playgroud)

对于

     A[i] = strconv.Atoi(A[i])
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

    ./insertionSort.go:14: multiple-value strconv.Atoi() in single-value context
Run Code Online (Sandbox Code Playgroud)

感谢您的时间!

One*_*One 6

Atoi返回数字和错误(或零)

ParseInt解释给定基数(2到36)中的字符串s并返回相应的值i.如果base == 0,则字符串的前缀暗示基数:base 16表示"0x",base 8表示"0",否则表示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])
}
Run Code Online (Sandbox Code Playgroud)

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