2013-03-25 188 views
3

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

cannot use row[5] (type uint8) as type string in function argument

cannot use &v (type *Field) as type int in function argument

这是行的例子[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可以将行转换为整数?

+0

您必须先将行[5]转换为字符串。另外,你删除多余的&v – fuz 2013-03-25 21:05:11

+0

我没有提及从csv /编码包中读取行[5]。因此,它默认情况下已经是一个字符串。 – Alex 2013-03-26 03:09:46

+0

你没有向我们展示记录的tyoe。信息不足的帮助很困难。 – fuz 2013-03-26 07:47:28

回答

3

如果您在http://play.golang.org/上提供了一个完整的示例,那么为您提供完整的解决方案会更容易。 ParseInt()接受字符串(你可能必须做string(row[5])),基础(你可能意思是10)和比特尺寸(这是你应该放8的地方)。

它回调一个int(eia),它不会将它放入结构中,因为它看起来像您正在尝试。

取而代之的是if err == nil { v.Eia = eia }

+0

嗯,我设法让字符串转换正常工作,首先投射一个字符串变量,并用正确的基础和比特大小解析它,正如你所提到的。这是:http://play.golang.org/p/qUIF3dRIat – Alex 2013-03-26 03:13:11

+0

解决方案的唯一警告是我不得不消除美元符号($),因为它会导致无效的语法转换错误。 – Alex 2013-03-26 03:15:25

+1

你可以使用'strings.TrimLeft'去除你不想要的任何主角,例如http://play.golang.org/p/GNhp8lLwdl – 2013-03-26 04:00:00