【问题标题】:Golang: How do I convert command line arguments to integers?Golang:如何将命令行参数转换为整数?
【发布时间】:2014-08-10 17:51:43
【问题描述】:

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

    $ 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

感谢您的宝贵时间!

【问题讨论】:

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


    【解决方案1】:

    Atoi

    返回数字和错误(或 nil)

    ParseInt 解释给定基数(2 到 36)中的字符串 s 并返回相应的值 i。如果 base == 0,则字符串前缀隐含 base:base 16 表示“0x”,base 8 表示“0”,否则为 base 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和符号的最大幅度整数。

    你需要做的:

    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

    【讨论】:

    • 补充一点:“单值上下文中的多值 XXXXXX”总是 表示您没有捕获(或用 _ 显式忽略)来自的所有返回值一个函数。在大多数情况下,函数返回 >= 2 个值,而您只捕获一个。一个好的编辑器会对此有所帮助,因为它会在自动完成过程中向您显示函数签名。
    猜你喜欢
    • 2016-07-09
    • 2020-06-27
    • 2012-08-27
    • 2014-11-07
    • 2011-06-15
    • 2017-07-23
    • 2023-03-25
    相关资源
    最近更新 更多