GO lang is one of the more successful programming languages, allowing performance oriented programming to be part of the code, while handling garbage collection (Unlike C++).
In this post we'll create a new GO based http server on ubuntu 18.04, and use JenBrains' GoLand IDE for the project development. Following are the steps for creating the project.
Install GoLang
Start by updating ubuntu packages:
sudo apt-get update
Then ,find the latest GoLang binary release in https://golang.org/dl/
and download it:
wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
Extract and move it to /usr/local
tar -xvf go1.13.4.linux-amd64.tar.gz
sudo mv go /usr/local
Install JetBrains GoLand
Download the lastest GoLand from: https://www.jetbrains.com/go/download/#section=linux
Unzip, and run the extracted folder the GoLand
./bin/goland.sh
Note:
If yo're working on ubuntu, use the GoLand to create desktop entry. This can be done only after the "Create New project" step. To create desktop entry, use the GoLand menu:
Tools, Create Desktop Entry...
Create New Project
Click on File, New project, and select Go Modules.
Type the location for the project, for example:
/home/my-user/projects/my-server
Click on the plus sign next to the GOROOT, select local, and select the go installation:
/usr/local/go
And click on the Create button.
The project explorer is displayed, and the go.mod file is created.
The go.mod includes the project name, and the go version. It is actually the GoLand running for us the `go mod init` command that had created this file.
Create the Server
Create new file named main.go, and enter the following code:
package main import ( "k8s.io/klog" "net/http" "strconv") func main() { klog.Info("Server starting") mux := http.NewServeMux() mux.HandleFunc("/", helloHandler) mux.HandleFunc("/square", squareHandler) server := &http.Server{ Addr: ":8080", Handler: mux, } err := server.ListenAndServe() if err != nil { klog.Fatalf("Failed to start, error: %v", err) } } func squareHandler(w http.ResponseWriter, r *http.Request) { n, err := strconv.Atoi(r.URL.Query().Get("n")) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("conversion error")) return } w.Write([]byte("square is " + strconv.Itoa(n*n))) }
func helloHandler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("The server is up")) }
This server is starting on port 8080, and has two handler.
The / path reply with "the server is up".
the /square path gets a query parameter named n, and returns the square of the number.
Run the server
Right click on the main.go file, and select:
Run `go build main.go`
This will both handle the `go get` command to update the dependencies in the go.mod file, as well as running the actual server.
Summary
This post includes the first steps in creation of a go based server, and running it using GoLand.
In future post we'll examine dockerization of the build, and tests.
In future post we'll examine dockerization of the build, and tests.
No comments:
Post a Comment