🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)
🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)

🔧 Programmierung 🕛 kürzlich 5 Min Lesezeit
0

Calculator Backend-API In Go

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

Back again with another mini-project, this time with a calculator backend API tool written in Go!



I recently wrapped up a project to build an HTTP+JSON API for a stateless calculator, and let me tell you—it was a lot more fun (and a little more challenging) than I expected. On the surface, it might sound simple: “Hey, it’s just a calculator, right?” But once you dive in, you start uncovering all the nitty-gritty details that make an API truly production-ready.



So, let me share the process, the lessons learned, and what I’d tweak if I had to do it again.



~ Souce code: Found



I hadn’t initially planned for this API to be used in a browser-based app, but as the project evolved, it became clear that CORS (Cross-Origin Resource Sharing) was necessary.



Using the github.com/rs/cors package, I quickly added the required headers to allow browser-based clients to interact with the API.




CODE
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "OPTIONS"},
AllowedHeaders: []string{"Content-Type"},
AllowCredentials: true,
})












My main packages



1) net/http: Go’s standard library for setting up the HTTP server and routing requests.

2) encoding/json: To handle JSON encoding/decoding for requests and responses.

3) golang.org/x/exp/slog: For logging every request in either text or JSON format.

4) github.com/rs/cors: To handle cross-origin requests for web integrations.





What about the calculation logic?



Well I made some handlers for these calculations, they are pretty basic in nature and primarily focus on the core functionality of calculations (Addition, Subtraction, Division & Multiplication).




CODE
//handlers.go

func AddHandler(logger *slog.Logger) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
handleOperation(logger, w, r, func(a, b float64) float64 { return a + b })
}
}

func SubtractHandler(logger *slog.Logger) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
handleOperation(logger, w, r, func(a, b float64) float64 { return a - b })
}
}

func MultiplyHandler(logger *slog.Logger) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
handleOperation(logger, w, r, func(a, b float64) float64 { return a * b })
}
}

func DivideHandler(logger *slog.Logger) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
handleOperation(logger, w, r, func(a, b float64) float64 {
if b == 0 {
panic("division by zero")
}
return a / b
})
}
}






Aside from this, handling my HTTP requests with the famous net/http package was straightforward and there are many examples out there of doing this in different ways. My case was very simple and I just needed to serve up some HTTP, handling the response writer and the request.




CODE
func LoggingMiddleware(next http.Handler, logger *slog.Logger) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
lrw := &loggingResponseWriter{ResponseWriter: w, statusCode: http.StatusOK}

next.ServeHTTP(lrw, r)

duration := time.Since(start)
logger.Info("Request completed",
"path", r.URL.Path,
"method", r.Method,
"status", lrw.statusCode,
"duration", duration)
})
}

type loggingResponseWriter struct {
http.ResponseWriter
statusCode int
}

func (lrw *loggingResponseWriter) WriteHeader(code int) {
lrw.statusCode = code
lrw.ResponseWriter.WriteHeader(code)
}






Here are some use-case examples:




CODE
// Start up server
// go run main.go

time=2024-12-01T19:11:47.777-05:00 level=INFO msg="Starting server on :3000"

time=2024-12-01T19:11:55.440-05:00 level=INFO msg="Request completed" path=/add method=POST status=200 duration=164.584µs

time=2024-12-01T19:12:51.520-05:00 level=INFO msg="Request completed" path=/subtract method=POST status=200 duration=124.875µs

time=2024-12-01T19:12:56.727-05:00 level=INFO msg="Request completed" path=/divide method=POST status=200 duration=40.875µs

time=2024-12-01T19:13:04.128-05:00 level=INFO msg="Request completed" path=/multiply method=POST status=200 duration=46.458µs






Requests:




CODE

// Addition
curl -d '{"a": 10, "b": 5}' http://localhost:3000/add
{"result":15}

// Subtraction
curl -d '{"a": 10, "b": 5}' http://localhost:3000/subtract
{"result":5}

// Division
curl -d '{"a": 10, "b": 5}' http://localhost:3000/divide
{"result":2}

// Multiplication
curl -d '{"a": 10, "b": 5}' http://localhost:3000/multiply
{"result":50}









Conclusion



Yep! That's pretty much it! It was a quick and fun mini-project that I enjoyed! Feel free to give it a try and improve & enhance whichever way you'd like to.



Until next time, cheers! 🍻 🥂

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
3 Quellen
GPT-6 Astra Release Today? OpenAI’s Next Major AI Model Is Almost Here
1 Quelle
Apple accuses OpenAI of destroying evidence as trade-secrets fight intensifies
1 Quelle
Major AI platforms go down in unprecedented simultaneous outage
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Calculator Backend-API In Go

Thematisch verwandte Begriffe: Calculator, BackendAPI · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...