README
This commit is contained in:
@@ -1,2 +1,92 @@
|
|||||||
# httpserver
|
# Basic HTTP Server in Go
|
||||||
A very basic HTTP server made in GO
|
This document explains the functionalities of a basic HTTP server implemented in Go. The server responds to two different routes: `/` and `/hello`.
|
||||||
|
|
||||||
|
## Code Overview
|
||||||
|
|
||||||
|
### Package and Imports
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
The server starts by defining the main package and importing necessary libraries:
|
||||||
|
|
||||||
|
- errors: For handling errors.
|
||||||
|
- fmt: For formatted I/O operations.
|
||||||
|
- io: For basic input and output interfaces.
|
||||||
|
- net/http: For HTTP client and server implementations.
|
||||||
|
- os: For interacting with the operating system.
|
||||||
|
|
||||||
|
### Root Handler
|
||||||
|
|
||||||
|
```go
|
||||||
|
func getRoot(w http.ResponseWriter, r *http.Request) {
|
||||||
|
fmt.Printf("Request received: \n")
|
||||||
|
io.WriteString(w, "This is my first web server. \n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
The getRoot function handles requests to the root URL (/). It prints a message to the console and responds to the client with a simple message.
|
||||||
|
|
||||||
|
### Hello Handler
|
||||||
|
|
||||||
|
```go
|
||||||
|
func getHello(w http.ResponseWriter, r *http.Request) {
|
||||||
|
fmt.Printf("Hello request received: \n")
|
||||||
|
io.WriteString(w, "Hello, World! \n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
The getHello function handles requests to the /hello URL. It prints a different message to the console and responds with a "Hello, World!" message.
|
||||||
|
|
||||||
|
### Main Function
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
http.HandleFunc("/", getRoot)
|
||||||
|
http.HandleFunc("/hello", getHello)
|
||||||
|
|
||||||
|
err := http.ListenAndServe(":8080", nil)
|
||||||
|
if errors.Is(err, http.ErrServerClosed) {
|
||||||
|
fmt.Printf("Server Closed! \n")
|
||||||
|
} else if err != nil {
|
||||||
|
fmt.Printf("Error: %v \n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Printf("Server started! \n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
The main function sets up the HTTP server:
|
||||||
|
|
||||||
|
- It registers the getRoot handler for the root URL (/).
|
||||||
|
- It registers the getHello handler for the /hello URL.
|
||||||
|
- It starts the server on port 8080 using http.ListenAndServe.
|
||||||
|
- If the server is closed or an error occurs, appropriate messages are printed, and the program exits with a status code of 1.
|
||||||
|
|
||||||
|
### Error Handling
|
||||||
|
The server uses errors.Is to check if the error returned by http.ListenAndServe is http.ErrServerClosed. If a different error occurs, it prints the error and exits the program.
|
||||||
|
|
||||||
|
|
||||||
|
## Running the Server
|
||||||
|
To run the server, execute the following command in your terminal:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go run main.go
|
||||||
|
```
|
||||||
|
|
||||||
|
This will start the server on port 8080. You can access the root URL (`http://localhost:8080/`) and the hello URL (`http://localhost:8080/hello`) in your browser or using a tool like CURL.
|
||||||
|
```bash
|
||||||
|
curl http://localhost:8080/
|
||||||
|
curl http://localhost:8080/hello
|
||||||
|
```
|
||||||
|
|
||||||
|
The server will respond with the following messages for each route:
|
||||||
|
- http://localhost:8080/: Displays "This is my first web server."
|
||||||
|
- http://localhost:8080/hello: Displays "Hello, World!"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user