始终引用csv值
我想引用CSV文档中的所有字段。有没有办法在不复制所有代码的情况下修改golang的模块?在另一种语言中,我只是从csv.Writer继承并重写,但这在Go中是不可能的,或者是吗?Matt和Volker已经说过,您可以复制并修改模块 您也可以使用Writer包装器,但我认为它有点复杂。 将我的尝试视为概念证明(不使用*) 下面是csv#Writer测试()中应用概念验证的示例: 不使用*请注意,我并没有检查所有情况,例如,如果逗号是否在引用的文本中,那么您需要检查并调整它。始终引用csv值,csv,go,Csv,Go,我想引用CSV文档中的所有字段。有没有办法在不复制所有代码的情况下修改golang的模块?在另一种语言中,我只是从csv.Writer继承并重写,但这在Go中是不可能的,或者是吗?Matt和Volker已经说过,您可以复制并修改模块 您也可以使用Writer包装器,但我认为它有点复杂。 将我的尝试视为概念证明(不使用*) 下面是csv#Writer测试()中应用概念验证的示例: 不使用*请注意,我并没有检查所有情况,例如,如果逗号是否在引用的文本中,那么您需要检查并调整它。 我还建议复制和修改
我还建议复制和修改csv包。我明白了,这是一个老问题。但我最近也遇到了同样的问题,通过扩展Golang的
编码/csv
,创建了一个小型库altcsv
如果其他人对此感到疑惑,您可以使用以下库:
它与现有的CSV库向后兼容。我计划在将来添加更多类似python的CSV接口
从CSV文件读取:
fileRdr, _ = os.Open("/tmp/custom_csv_file.txt")
csvRdr := altcsv.NewReader(fileRdr)
content := csvReader.ReadAll()
headers = []string{"hero_name", "alter_ego", "identity"}
fileWtr, _ := os.Create("/tmp/all_quotes_csv_file.txt")
csvWtr := altcsv.NewWriter(csvH)
csvWtr.AllQuotes = true // surround each field with '"'
csvWtr.Write(headers)
csvWtr.Write([]string{"Spider-Man", "Peter Parker", "Secret Identity"})
csvWtr.Write([]string{"Captain America", "Steven Rogers", "Public Identity"})
csvWtr.Write([]string{"Thor", "Thor Odinson", "No dual Identity"})
csvWtr.Flush()
fileWtr.Close()
写入CSV文件:
fileRdr, _ = os.Open("/tmp/custom_csv_file.txt")
csvRdr := altcsv.NewReader(fileRdr)
content := csvReader.ReadAll()
headers = []string{"hero_name", "alter_ego", "identity"}
fileWtr, _ := os.Create("/tmp/all_quotes_csv_file.txt")
csvWtr := altcsv.NewWriter(csvH)
csvWtr.AllQuotes = true // surround each field with '"'
csvWtr.Write(headers)
csvWtr.Write([]string{"Spider-Man", "Peter Parker", "Secret Identity"})
csvWtr.Write([]string{"Captain America", "Steven Rogers", "Public Identity"})
csvWtr.Write([]string{"Thor", "Thor Odinson", "No dual Identity"})
csvWtr.Flush()
fileWtr.Close()
至少在Java和Python中,重写的方法将从父类调用。你能制作一个显示其他内容的程序吗?和输出。几乎:例如,没有继承许多其他语言。只需复制代码并将FieldNeedsQuaotes替换为true。非常简单,不需要继承。您不能在Go中“过度使用”方法,也不能将方法添加到在包中定义的结构之外。但是,如果我可以问,为什么要在CSV文件中引用每个值?这不是必需的,而且会使它变得更大,我打赌这就是为什么Go不支持在encoding/csv包中这样做的原因。@Matt好的,那么最好的做法是复制模块?如果是这样,这可能是一个答案。我很清楚引用是不必要的,但我正在为程序输出提供数据的专有软件需要引用。@phihag我想不出比复制软件包并使用自己的软件包更好的方法了。虽然,您可以考虑扩展编码/CSV包来支持诸如“代码> QuoTalalValue<代码>之类的选项,然后将该想法提交给Goover在谷歌群组/谷歌代码上,解释您的情况,并查看它们是否会将其拉入。