golang server api для json общения

https://www.youtube.com/watch?v=5zOfVYBDz_o видео # Переделал ``` package main import ( "fmt" "log" "net/http" "encoding/json" //"strconv" ) type User struct { Name string Age int } var users []User func main() { http.HandleFunc("/users", userHendler) fmt.Println("Server start") err := http.ListenAndServe("localhost:3000", nil) if err != nil { log.Fatal(err) } } func userHendler(writer http.ResponseWriter, request *http.Request) { switch request.Method { case http.MethodGet: getUser(writer, request) case http.MethodPost: postUser(writer, request) default: http.Error( writer, "method not exists:"+request.Method, http.StatusMethodNotAllowed, ) } } func getUser(writer http.ResponseWriter, request *http.Request) { json.NewEncoder(writer).Encode(users) //fmt.Fprintf(writer, "get users: %v", users) } func postUser(writer http.ResponseWriter, request *http.Request) { var user User err := json.NewDecoder(request.Body).Decode(&user) if err != nil { http.Error( writer, err.Error(), http.StatusInternalServerError, ) return } users = append(users, user) // Отправляем JSON клиенту writer.Header().Set("Content-Type", "application/json") json.NewEncoder(writer).Encode(map[string]interface{}{ "ok": 1, "UserName": user.Name, }) } ``` # JS для проверки ``` js // POST fetch('http://localhost:3000/users', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({name: 'John', age: 30}), }) .then(response => response.json()) .then(data => console.log('Success:', data)) .catch((error) => console.error('Error:', error)); // GET fetch('http://localhost:3000/users') .then(response => response.json()) .then(data => console.log('Success:', data)) .catch((error) => console.error('Error:', error)); ``` # My old ``` package main import ( "fmt" "log" "net/http" "strconv" ) var n int func main() { http.HandleFunc("/telegramReceiver", telegramReceiver) fmt.Println("Server start") err := http.ListenAndServe("localhost:3000", nil) if err != nil { log.Fatal(err) } } func telegramReceiver(w http.ResponseWriter, r *http.Request) { n++ http.Error(w, "good error"+strconv.Itoa(n), http.StatusMethodNotAllowed) } ``` # Пример ещё проще на отдачу текста ``` package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", HelloServer) http.ListenAndServe(":8080", nil) // err := http.ListenAndServeTLS(":3020", "cert.pem", "key.pem", nil) } func HelloServer(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:]) } ```