Как вывести срез (массив) с значениями типа 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("]")
}
→ Ссылка