1
我想引用CSV文檔中的所有字段。有沒有辦法修改golang的csv模塊而不必複製所有的代碼?在另一種語言中,我只是從csv.Writer繼承並覆蓋fieldNeedsQuotes
,但這在Go中不可行,還是它?始終引用csv值
我想引用CSV文檔中的所有字段。有沒有辦法修改golang的csv模塊而不必複製所有的代碼?在另一種語言中,我只是從csv.Writer繼承並覆蓋fieldNeedsQuotes
,但這在Go中不可行,還是它?始終引用csv值
Matt和Volker已經表示可以複製模塊並對其進行修改。
你也可以使用Writer包裝器,但我認爲它有點複雜。 看到我的嘗試作爲概念證明(不被使用*)。
type quoteWriter struct {
w io.Writer
}
func (w quoteWriter) Write(p []byte) (n int, err error) {
q := make([]byte, 0)
quoted := true
quoted = (p[0] == '"')
if !quoted {
//begin field quote
q = append(q, '"')
}
for i, v := range p {
//We check the "quotation" status for new field or line
//This is a simplification
if v == ',' || v == '\n' {
if !quoted { //end field quote
q = append(q, '"')
}
//copy current byte
q = append(q, v)
//is next byte quote?
if len(p) > i+1 {
quoted = (p[i+1] == '"')
}
if !quoted { //begin field quote
q = append(q, '"')
}
} else {
q = append(q, v)
}
}
return w.w.Write(q)
}
請參閱從CSV#編寫測試(http://golang.org/src/pkg/encoding/csv/writer_test.go)與概念驗證應用來下面的例子:
http://play.golang.org/p/wovYUkt6Vq
不使用*請注意,我的天堂例如,如果逗號在引用文本內,則不檢查所有情況,因此您需要檢查並修改它。 我也建議複製和修改csv包。
至少在Java和Python中,將從父類中調用overriden方法。你能製作一個能夠顯示其他內容的程序嗎[見本演示](http://ideone.com/e4gIZU)和輸出。 – phihag
幾乎:例如沒有許多其他語言的繼承。只需複製代碼並將fieldNeedsQuotes替換爲true即可。死簡單,不需要繼承。 – Volker
您不能在Go中「覆蓋」方法,也不能將方法添加到它們定義的包之外的結構中。但是,如果我可能會問,爲什麼要引用CSV文件中的每個值?這不是必要的,可以使它更大,我敢打賭,Go不支持在encoding/csv包中執行它。 – Matt