【问题标题】:Type conversion of string to intstring 到 int 的类型转换
【发布时间】:2013-03-25 20:44:07
【问题描述】:

好的,所以我在将字符串类型转换为字节写入时遇到了困难。这是编译器错误:

不能在函数参数中使用 row[5] (type uint8) 作为字符串类型

不能在函数参数中使用 &v (type *Field) 作为 int 类型

这是第 [5] 行的示例:$15,000.00

我已经声明了一个结构:

type Field struct {
Eia uint8
}

这里是主要的实现:

for {
    record, err := reader.Read()
    if err == io.EOF {
        break
    } else if err != nil {
        panic(err)
    }

    var v Field
    for _, row := range record {
        eia, err := strconv.ParseInt(row[5], 8, &v) // Estimated Incoming Amount
        if err == nil {
            fmt.Printf("%+v\n", v)
        } else {
            fmt.Println(err)
            fmt.Printf("%+v\n", v)
        }

谁能解释一下 strconv 如何将行转换为整数?

【问题讨论】:

  • 您必须先将 row[5] 转换为字符串。此外,您删除了多余的 &v
  • 我没有提到 row[5] 是从 csv/encoding 包中读取的。因此,默认已经是字符串了。
  • 您没有向我们展示记录的主题。信息不足很难提供帮助。

标签: go


【解决方案1】:

如果你在http://play.golang.org/ 上做了一个完整的例子,给你一个完整的解决方案会更容易。

ParseInt() 接受字符串(您可能必须使用string(row[5]))、基数(您可能指的是 10)和位大小(应该放 8 的位置)。

它返回一个 int (eia),它不会像你正在尝试的那样将它放入结构中。

改为if err == nil { v.Eia = eia }

【讨论】:

  • 嗯,我设法让字符串转换正常工作,方法是首先转换一个字符串变量并用你提到的正确的基数和位大小解析它。这是:play.golang.org/p/qUIF3dRIat
  • 解决方案的唯一警告是我必须消除美元符号 ($),因为它会导致无效的语法转换错误。
  • 您可以使用strings.TrimLeft 删除您不想要的任何前导字符,例如play.golang.org/p/GNhp8lLwdl
猜你喜欢
  • 1970-01-01
  • 2016-03-25
  • 2011-05-22
  • 2014-01-07
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多