The Web Server module is a core component of GoFrame, a comprehensive modular framework. We'll start our journey with web service development, as it's an excellent way to introduce the framework's capabilities.
Hello World
Let's create a simple web server:
main.go
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
r.Response.Write("Hello World!")
})
s.SetPort(8000)
s.Run()
}
Let's break down this code:
- The
g.Server()method returns a defaultServerobject implemented as a singleton. This means multiple calls return the same instance. Thegpackage is a convenience wrapper that initializes and provides access to commonly used components. - Routes and their handlers are registered using the
Serverobject'sBindHandlermethod. In this example, we've mapped the root path/to a handler that returns "Hello World". - The handler function receives a
*ghttp.Requestparameter (r) containing the current request's context. Here, we user.Response.Writeto send our response. - The
SetPortmethod configures the server's listening port (8000 in this case). If not specified, a random port is assigned. - Finally, the
Run()method starts the server and blocks until the program is terminated.
Running the Server
When you run the program, you'll see output similar to this in your terminal:
$ go run main.go
2024-10-27 21:30:39.412 [INFO] pid[58889]: http server started listening on [:8000]
2024-10-27 21:30:39.412 [INFO] {08a0b0086e5202184111100658330800} openapi specification is disabled
ADDRESS | METHOD | ROUTE | HANDLER | MIDDLEWARE
----------|--------|-------|-----------------|-------------
:8000 | ALL | / | main.main.func1 |
----------|--------|-------|-----------------|-------------
The output provides several key pieces of information:
- Process ID (
58889) and listening address (:8000, which means the server is listening on all local IP addresses on port8000) - A notice about OpenAPI specification being disabled (the framework includes automatic API documentation generation, which we'll cover in detail later)
- A routing table showing:
ADDRESS: The listening address for each route. Note that a single process can host multipleServerinstances, each with its own addressMETHOD: The HTTP methods the route handles (ALLmeans it accepts any method: GET, POST, PUT, DELETE, etc.)ROUTE: The URL path patternHANDLER: The route's callback function name (shown asmain.main.func1since we used an anonymous function)MIDDLEWARE: Any middleware attached to the route (we'll cover middleware, a powerful request interceptor feature, in later chapters)
Visit http://127.0.0.1:8000/ in your browser to see the result:
What's Next
Great job! You've just created your first web server with GoFrame!
In the next section, we'll explore how to handle client-submitted data in your web server.