У меня есть куча диапазонов IP-адресов или отдельных адресов.Я разобрался, как их прокрутить, я могу успешно распечатать их на консоли.Однако когда я записываю одни и те же данные в CSV, он волшебным образом добавляет запятую после каждого значения (вместо того, чтобы добавлять их под одним заголовком, разделенным пробелом).Я следую всем правилам (ну, по-видимому, в любом случае) при добавлении данных в Go, но я просто не могу понять, почему это не работает.Я предполагаю, что функция CSV в Go просто видит пробел и думает, что она должна быть разделена запятой.
Часть этого input
проходит по адресам типа []string
.Таким образом, одно значение может быть 127.0.0.1 - 127.0.0.255
или просто 127.0.0.1
.Я просто хочу, чтобы они выглядели так в столбце csv Included
: 127.0.0.1 - 127.0.0.255 127.0.0.1
Скриншот того, как данные отображаются в консоли (правильно):
Снимок экрана CSV (не правильно):
Я хочу, чтобы пример CSV выглядел следующим образом:
Вот код, с которым я сейчас работаю.Если нужно больше, дайте мне знать, но именно так я записываю данные в CSV.
func ToCsv(inputs []interface{}, output io.Writer) {
w := csv.NewWriter(output)
defer w.Flush()
if len(inputs) == 0 {
return
} else {
// Get Header
r := reflect.ValueOf(inputs[0])
val := reflect.Indirect(reflect.ValueOf(inputs[0]))
var headers []string
for i := 0; i < r.NumField(); i++ {
headers = append(headers, val.Type().Field(i).Name)
}
w.Write(headers)
// Get Content
for _, input := range inputs {
ri := reflect.ValueOf(input)
var result []string
for i := 0; i < ri.NumField(); i++ {
switch ri.Field(i).Interface().(type) {
case []string:
//this is the part that's looping through all the ip addresses and is causing me a headache
stringArray := ri.Field(i).Interface().([]string)
for ii := 0; ii < len(stringArray); ii++ {
stringArray[ii] = strings.Replace(stringArray[ii], " ", ":", -1)
result = append(result,stringArray[ii])
}
case bool:
result = append(result, strconv.FormatBool(ri.Field(i).Interface().(bool)))
case int32:
result = append(result, strconv.FormatInt(int64(ri.Field(i).Interface().(int32)), 10))
case []int32:
intArray := ri.Field(i).Interface().([]int32)
for ii := 0; ii < len(intArray); ii++ {
result = append(result, strconv.FormatInt(int64(intArray[ii]),10))
}
case string:
result = append(result, ri.Field(i).Interface().(string))
default:
result = append(result, "")
}
}
w.Write(result)
}
}
}