はじめに
初めての Go言語 を自分なりに理解した内容をメモ書きとして記載する。
動作は、Raspberry Pi4 上で Go言語 と 「ECHO」の環境であり その構築方法は、
『Raspberry Pi4 に Go言語 と 「ECHO」の環境を構築する』に記述している。
基本機能のソースコード
ここでは、下記の基本機能に絞ったソースコードを記載する。
- 引数(flag)
- 表示(fmt)
- 他サーバーからデータを受信
- Webサーバ(net/http) Hellow World! と表示
ソースコードの意味は、コメントを見て下さい。
【参考情報】
https://github.com/labstack/echo
https://echo.labstack.com/guide
//////////////////////////////////////////////////
// go言語 / Echo 環境下での基本動作
//
// 1. 引数(flag)
// 2. 表示(fmt)
// 3. 他サーバーからデータを受信
// 4. Webサーバ(net/http) Hellow World! と表示
//
// 参考:https://github.com/labstack/echo
// https://echo.labstack.com/guide/
//////////////////////////////////////////////////
package main
import (
"fmt"
"flag"
"net/http"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
const (
IP = "192.0.0.1"
API_PORT = 3000
Users = "/Users"
Return = true
)
// 構造体の定義 {"name":"Name", "email":"mail_address@xxxx.xx.jp" }
type User struct {
Name string `json:"name" xml:"name" form:"name" query:"name"`
Email string `json:"email" xml:"email" form:"email" query:"email"`
}
func saveUser(c echo.Context) error {
// 構造体を初期化後 データを受け取る
u := new(User)
if err := c.Bind(u); err != nil {
return err
}
// 受け取ったデータを表示
fmt.Println(u)
if Return == true {
// 受け取ったデータを JSON形式で返す
return c.JSON(http.StatusCreated, u)
} else {
//レスポンスコード 204 No Content(エラーなし)を返す
return c.NoContent(http.StatusOK)
}
}
func main() {
// 1. 引数(flag) -ip xxx.xx.xx
ip := flag.String("ip", IP, "IP Address")
flag.Parse()
ipaddress := *ip
// 2. 表示(fmt)
fmt.Println("IP:", ipaddress)
// Echo instance
e := echo.New()
// Middleware
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// 3. 他サーバーからデータを受信
e.POST(Users, saveUser)
// 4. Webサーバ(net/http) Hellow World! と表示
e.GET("/", hello)
// Start server
e.Logger.Fatal(e.Start(ipaddress + ":3000"))
}
// Handler
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
ソースコードが置かれている場所で下記を実行
$ go mod init exsample.com/m
$ go mod tidy
その後 プログラムを下記の様に起動
※xxx.xxx.xxx.xx は、raspberry pi の IPアドレス
$ go run main.go -ip xxx.xxx.xxx.xx
IP: xxx.xxx.xxx.xx
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.6.1
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
⇨ http server started on xxx.xxx.xxx.xx:3000
ネットワーク内にある他のマシンでブラウザを用いて [xxx.xxx.xxx.xx:3000] にアクセスすると Hello World と表示される。
他マシンから Name / Email を JSON 形式で送る 下記例は、Windows PC
curl -X POST http://xx.xx.xx.xx:3000/Users -H "Content-Type: application/json" -d "{\"Name\":\"MyName\",\"Email\":\"My.Email.address@test.ne.jp\"}"
☆2022年 1月11日(火) 午前11時00分 初版(Ver1.00) 作成
☆2022年 1月17日(月) 午後 2時35分 Ver1.10 : <他サーバーからデータを受信> を追加
☆2024年 9月04日(月) 午後 3時00分 Ver1.11 : 細かいミスを修正