Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Project

Проект представляет собой простой HTTP-сервер на языке Go package main

import ( "encoding/json" "errors" "fmt" "net/http" "strconv" "strings" )

type CalculateRequest struct { Expression string json:"expression" }

type CalculateResponse struct { Result float64 json:"result" Error string json:"error" }

func CalculateHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) return } var req CalculateRequest err := json.NewDecoder(r.Body).Decode(&req) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return }

result, err := Calc(req.Expression) if err != nil { if err.Error() == "Expression is not valid" { resp := CalculateResponse{Result: 0, Error: "Expression is not valid"} w.WriteHeader(http.StatusUnprocessableEntity) json.NewEncoder(w).Encode(resp) return } else { resp := CalculateResponse{Result: 0, Error: "Internal server error"} w.WriteHeader(http.StatusInternalServerError) json.NewEncoder(w).Encode(resp) return } }

resp := CalculateResponse{Result: result, Error: ""} w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(resp) }

func Calc(expression string) (float64, error) { tokens := tokenize(expression) postfix, err := infixToPostfix(tokens) if err != nil { return 0, err } return evaluatePostfix(postfix) }

// код функций tokenize, infixToPostfix, evaluatePostfix, isNumber, isOperator, precedence остаётся как в предыдущем примере

func main() { http.HandleFunc("/api/v1/calculate", CalculateHandler) fmt.Println("Server is running on port 8080") http.ListenAndServe(":8080", nil) }

About

Проект представляет собой простой HTTP-сервер на языке Go

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors