20220111のGoに関する記事は3件です。

DockerでSFTPサーバ立ててGoでアクセスしてみる

最初に GoのSFTPパッケージ触りたかったけど、サーバ立てるのも面倒だったのでコンテナでサクッとやっちゃおうと思ったメモ SFTPサーバ立てるメモ atmoz/sftpを使って docker-compose.yml version: '3' services: sftp: image: atmoz/sftp container_name: sftp-server volumes: - ./sftp-server/upload:/home/foo/upload ports: - "2222:22" command: foo:pass:::upload な感じでyaml用意して mkdir sftp-server mkdir sftp-server/upload docker-compose up -d --build sftp -oPort="2222" foo@localhost な感じでコマンド叩いて、パスワードにpassって入れたら接続できる。 sftp> cd upload sftp> put test sftp> exit な感じでupload以下にファイル配置OK Go SFTPが用意できたので、github.com/pkg/sftpとgolang.org/x/crypto/sshのサンプル参考に main.go package main import ( "fmt" "log" "os" "github.com/pkg/sftp" "golang.org/x/crypto/ssh" ) func main() { if err := Main(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } func Main() error { host := "localhost" port := "2222" user := "foo" pass := "pass" fmt.Println("Create sshClientConfig") sshConfig := &ssh.ClientConfig{ User: user, Auth: []ssh.AuthMethod{ ssh.Password(pass), }, HostKeyCallback: ssh.InsecureIgnoreHostKey(), } fmt.Println("SSH connect") addr := fmt.Sprintf("%s:%s", host, port) fmt.Println(addr) conn, err := ssh.Dial("tcp", addr, sshConfig) if err != nil { return err } fmt.Println("open an SFTP session over an existing ssh connection") client, err := sftp.NewClient(conn) if err != nil { return err } defer client.Close() fmt.Println("walk a directory") w := client.Walk("./") for w.Step() { if w.Err() != nil { continue } log.Println(w.Path()) } fmt.Println("leave your mark") f, err := client.Create("./upload/hello.txt") if err != nil { return err } if _, err := f.Write([]byte("Hello world!")); err != nil { return err } f.Close() fmt.Println("check it's there") fi, err := client.Lstat("./upload/hello.txt") if err != nil { return err } log.Println(fi) return nil } な感じで接続OK kotaoue/go-sftpにコードおいておく ?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ubuntuに最新のgolangをインストールする

環境 Ubuntu 16.04.7 既にgoが入っている場合は、アンインストール ubuntuのデフォルトでインストールできるバージョンは古いので、 もし入れてしまった場合は下記でアンインストールしてください $ sudo apt-get remove golang-go $ sudo apt-get remove --auto-remove golang-go $ sudo apt-get purge golang* goの最新のバージョンを確認 ・今回はubuntuに入れるので、「Linux」の「x86-64」から選択 https://go.dev/dl/ 作業スペースに移動して圧縮ファイルをダウンロードし、「/usr/local」に解凍します $ wget https://go.dev/dl/go1.17.6.linux-amd64.tar.gz $ tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz GO のbinの場所を環境変数に追加 $ export PATH=$PATH:/usr/local/go/bin 最新のバージョンになっていればOKです $ go version 永続的に環境変数を設定 再度puttyなどを再起動するとPATHに設定したgoのpathがリセットされるので、 永続的に登録する場合はホームディレクトリーの「.profile」の最後に設定を追加してください 「PATH=$PATH:/usr/local/go/bin」 $ cd /home/{userName} $ vi .profile
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

はじめに 初めての 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 Test.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\":\"Name\",\"Email\":\"Email_address@xxxx.ne.jp\"}" ☆2022年 1月11日(火) 午前11時00分 初版(Ver1.00) 作成 ☆2022年 1月17日(月) 午後 2時35分 Ver1.10 : <他サーバーからデータを受信> を追加
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む