Неясно, проблема в добавлении нового пользователя или в записи в файл
Если в добавлении, то можно сделать так:
package main
import (
"encoding/json"
"fmt"
"log"
)
type User struct {
ID int `json:"id"`
Score int `json:"score"`
}
func main() {
fileBytes := []byte(`[
{
"id":1,
"score": 335
},
{
"id":2,
"score": 123
},
{
"id":3,
"score": 321
}
]`)
var users []User
err := json.Unmarshal(fileBytes, &users)
if err != nil {
log.Fatalf("Failed to unmarshal: %s", err)
}
fmt.Printf("%#v\n", users)
newUser := User{
ID: 4,
Score: 1488,
}
users = addIfNotExist(users, newUser)
fmt.Printf("%#v\n", users)
// Дальше Marshal и сохранение в файле
}
func addIfNotExist(users []User, user User) []User {
for _, u := range users {
if u.ID == user.ID {
return users
}
}
return append(users, user)
}
https://play.golang.org/p/ytITBXxE7NB
Продублирую рекомендации из комментария к вопросу:
1) Используйте для работы с данными структуры, а не map и пустые интерфейсы. Это идиоматически более близко к Golang и удобнее
2) Всегда обрабатывайте ошибки. Если функция ReadAll выкинула ошибку, нет смысла пытаться делать Unmarshal. И сложно понять, что произошло, когда ошибка замалчивается