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:])
}
```