0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Raspberry Pi4 で GO言語を書いてみた(1)

Last updated at Posted at 2022-01-11

はじめに
初めての Go言語 を自分なりに理解した内容をメモ書きとして記載する。
動作は、Raspberry Pi4 上で Go言語 と 「ECHO」の環境であり その構築方法は、
『Raspberry Pi4 に Go言語 と 「ECHO」の環境を構築する』に記述している。


基本機能のソースコード
ここでは、下記の基本機能に絞ったソースコードを記載する。

  1. 引数(flag)
  2. 表示(fmt)
  3. 他サーバーからデータを受信
  4. Webサーバ(net/http) Hellow World! と表示

ソースコードの意味は、コメントを見て下さい。

【参考情報】
https://github.com/labstack/echo
https://echo.labstack.com/guide

main.go
//////////////////////////////////////////////////
// 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 と表示される。
image.png

他マシンから 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 : 細かいミスを修正


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?