go for it
This commit is contained in:
parent
3767be9f67
commit
c107d94b11
5 changed files with 137 additions and 1 deletions
64
README.md
64
README.md
|
@ -1,2 +1,64 @@
|
||||||
# playground-go
|
# Playground GO
|
||||||
|
|
||||||
|
A simple web server implementation in Go that demonstrates basic HTTP server concepts.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This project implements a basic HTTP server that:
|
||||||
|
- Listens on a specified address and port
|
||||||
|
- Handles HTTP requests
|
||||||
|
- Processes requests concurrently using goroutines
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── main.go # Application entry point
|
||||||
|
├── server/
|
||||||
|
│ ├── server.go # Server implementation
|
||||||
|
│ └── handler.go # HTTP request handlers
|
||||||
|
├── go.mod # Go module definition
|
||||||
|
└── README.md # This file
|
||||||
|
```
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Go 1.16 or higher
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. Import the server package in your Go code:
|
||||||
|
|
||||||
|
```go
|
||||||
|
import "your-module-name/server"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create a new server instance:
|
||||||
|
|
||||||
|
```go
|
||||||
|
server := server.NewServer(":8080") // Listen on port 8080
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Start the server:
|
||||||
|
|
||||||
|
```go
|
||||||
|
server.ListenAndServe()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Concurrent request handling using goroutines
|
||||||
|
- HTTP request processing
|
||||||
|
- Graceful error handling
|
||||||
|
- Simple and clean API design
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
The server includes basic error handling for:
|
||||||
|
- Address binding errors
|
||||||
|
- Request processing errors
|
||||||
|
- HTTP response errors
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Feel free to submit issues and enhancement requests!
|
||||||
|
|
3
go.mod
Normal file
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module git.okseby.com/okseby/playground-go
|
||||||
|
|
||||||
|
go 1.23.5
|
8
main.go
Normal file
8
main.go
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "git.okseby.com/okseby/playground-go/server"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
server := server.NewServer("0.0.0.0:7878")
|
||||||
|
server.ListenAndServe()
|
||||||
|
}
|
30
server/handler.go
Normal file
30
server/handler.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleConnection(conn net.Conn) {
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
reader := bufio.NewReader(conn)
|
||||||
|
request, err := reader.ReadString('\n')
|
||||||
|
if err != nil {
|
||||||
|
if err != io.EOF {
|
||||||
|
fmt.Println("read request error:", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("request:", request)
|
||||||
|
|
||||||
|
response := "HTTP/1.1 200 OK\r\n" +
|
||||||
|
"Content-Length: 13\r\n" +
|
||||||
|
"Content-Type: text/plain\r\n\r\n" +
|
||||||
|
"Hello, world!"
|
||||||
|
|
||||||
|
conn.Write([]byte(response))
|
||||||
|
}
|
33
server/server.go
Normal file
33
server/server.go
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Server struct {
|
||||||
|
addr string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewServer(addr string) *Server {
|
||||||
|
return &Server{addr: addr}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) ListenAndServe() {
|
||||||
|
listener, err := net.Listen("tcp", s.addr)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error binding to address:", err)
|
||||||
|
}
|
||||||
|
defer listener.Close()
|
||||||
|
|
||||||
|
fmt.Printf("Server listening on %s\n", s.addr)
|
||||||
|
|
||||||
|
for {
|
||||||
|
conn, err := listener.Accept()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error accepting connection:", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
go handleConnection(conn)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue