Как вывести срез (массив) с значениями типа int через запятую?
Есть код,
arr := []int{155, 133, 127, 123, 117, 105, 104, 98, 94, 90, 77, 76, 70, 55, 50, 45, 43, 42, 37, 29,}
fmt.Println(arr)
который выводит [155 133 127 123 117 105 104 98 94 90 77 76 70 55 50 45 43 42 37 29].
Как видите, числа через пробел, а мне необходимо вывести значения массива через запятую.
Подскажите пожалуйста, как это сделать ?
Ответы (2 шт):
Автор решения: u_mulder
→ Ссылка
По уму, конечно, надо закастовать массив интов в массив стрингов, чтобы вышло так:
arr := []string{"155", "133", ....}
fmt.Println(strings.Join(arr, ", "))
И это естественный способ - так как выводятся на экран строки, а не числа.
Но можно сделать такие костыли:
arr := []int{155, 133, 127, 123, 117, 105, 104, 98, 94, 90, 77, 76, 70, 55, 50, 45, 43, 42, 37, 29}
s := fmt.Sprint(arr)
fmt.Println(strings.ReplaceAll(s, " ", ", "))
Получается очень похоже на json. И если тебе действительно нужен json - то пользуйся инструментом для этого явно предназначенным: https://pkg.go.dev/encoding/json
Автор решения: Pak Uula
→ Ссылка
Ловите решение с модными дженериками :)
https://go.dev/play/p/OxNSxKfAJeM
package main
import (
"fmt"
"io"
"os"
)
func FprintArray[T any](w io.Writer, arr []T) {
if len(arr) == 0 {
return
}
fmt.Fprintf(w, "%v", arr[0])
for _, obj := range arr[1:] {
fmt.Fprintf(w, ", %v", obj)
}
}
func main() {
arr := []int{155, 133, 127, 123, 117, 105, 104, 98, 94, 90, 77, 76, 70, 55, 50, 45, 43, 42, 37, 29}
fmt.Print("[")
FprintArray(os.Stdout, arr)
fmt.Println("]")
}