- 1. Go | MySQL | EC2 | RDS の環境構築
- 2. Add custom header to S3 CreateBucket request
- 3. GO(Gorm) + MySQL 入門
- 4. M1 MacとIntel Macのバイナリの見分け方とユニバーサルバイナリの作成
- 5. GoとEC2で「Hello, World!」
- 6. oapi-codegenでHash Map (additionalProperties) はどうexportされるか
- 7. SpannerにおけるMutationの数え方
- 8. GoのHOTリロード機能(air)付きコンテナの環境構築
- 9. golangのTimeについて
- 10. Raspberry Pi でブロックチェーンの実証実験を行う(その2)
- 11. Golang(Gobot+Firmata+Arduino)でアナログメーターを作ってみる
- 12. Go言語でプライベートなGithubリポジトリにあるモジュールを利用し、DockerでBuildを行う方法
- 13. Raspberry Pi でブロックチェーンの実証実験を行う(その1)
- 14. 【Golang】ラズパイ+ go-sdl2 で /usr/bin/ld: -liconv が見つかりませんエラー【静的リンクのビルド時】
- 15. go buildはできるのに、VSCodeでgolangのimportがエラーと表示される
- 16. http.ListenAndServeTLSでサーバが起動できずハマったが、エラー出力を自分で書いたらすぐに解決した
- 17. FreeBSDで AWS Session Manager Plugin を導入してみる
- 18. Go言語 stringsパッケージ
- 19. go でGithub Copilot を軽く触ってみた
- 20. 【Golang】相関係数の算出
Go | MySQL | EC2 | RDS の環境構築
## 追記
この記事を書き終わってから、他の方々の記事を検索してみたのですが、AWS SDK for Goを使うのが一般的みたいです。
https://aws.amazon.com/jp/sdk-for-go/この記事は、EC2を手動で作って、GoのコードをコンパイルしたバイナリファイルをEC2にアップロードする方法です。よろしくお願いします。
## やりたいこと
ゴールは、GoをEC2に、MySQLをRDSに配置して、GoからMySQLに接続できることです。## Goアプリ
ローカルにGoは既にインストールされている前提です。
ちなみに、僕のGoのバージョンは1.16.6でした。
### ファイル構成
“`
.
├── go.mod
├── go.sum
├── init.sql
└── main.go
“`
### ファイル作成
usernameとappnameは適宜変更してください。“`zsh:zsh
$ go mod init github.com/username/appname
$ go get github.com/go-sql-driver/mysq
Add custom header to S3 CreateBucket request
Sample code for adding custom header to CreateBucket request.
AWS-SDK’s [CreateBucket](https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#S3.CreateBucket “CreateBucket”) does not let you add custom headers so you have to create your own http request.“`golang
import (
“fmt”
“log”
“net/http”
“time”“github.com/aws/aws-sdk-go/aws/credentials”
v4 “github.com/aws/aws-sdk-go/aws/signer/v4”
)func createBucket() {
endpoint := “https://xxx.xxx.xxx/”
region := “region-1”
bucketName :
GO(Gorm) + MySQL 入門
# はじめに
次のPJではGOのGORMとMySQLを採用するとの事だったので、自分がmacで行ったハンズオン内容を簡易的にまとめた。GORMって何?
[公式ドキュメント](https://gorm.io/ja_JP/docs/index.html)
→ Object-Relational Mappingの略。オブジェクトと関係(関係データベース、RDB)とのマッピングを行う。つまり、実際にSQL文を書かなくても、”直感的”にINSERT, SELECT, UPDATE, DELETEなど簡単にできちゃうイメージ。。。実際に実機で動作確認を行うのが、早いので行った環境構築とCRUDのソースコードを追記していきます。
## 環境構築編
### MySQL
MySQLのインストール方法に関しましては、「brew mysql」で検索頂けると結構参考となる記事があるので割愛させて下さい(要望がありましたら追記致します)。### Go ライブラリ
必要なライブラリを前もってインポートします。“`
% go get -u gorm.io/gorm
% go get -u
M1 MacとIntel Macのバイナリの見分け方とユニバーサルバイナリの作成
Apple M1 CPU と Intel CPU では
CPUアーキテクチャ(命令文やデータ形式)も異なり
バイナリファイル(実行可能なファイル)の中身も別物になる※M1搭載のMacで従来(Intel CPU搭載Mac)向けのバイナリが実行できるのは
Rosetta 2というアプリケーションでM1向けバイナリに変換したものを実行しているためまた、macOSの実行ファイル形式[Mach-O](https://ja.wikipedia.org/wiki/Mach-O)では複数のアーキテクチャのバイナリを格納することが可能で
複数のアーキテクチャ向けバイナリを格納したバイナリをユニバーサルバイナリと呼んだりする## バイナリファイルのアーキテクチャを調べる
`file ファイル名` コマンドで調べることができる
“`sh:
# Intel CPU向けバイナリの場合
$ file file ./foo/bar/hoge
./foo/bar/hoge: Mach-O 64-bit executable x86_64# M1 CPU向けバイナリの場合
$ file ./foo
GoとEC2で「Hello, World!」
## 追記
この記事を書き終わってから、他の方々の記事を検索してみたのですが、AWS SDK for Goを使うのが一般的みたいです。
https://aws.amazon.com/jp/sdk-for-go/この記事では、EC2を手動で作って、GoのコードをコンパイルしたバイナリファイルをEC2にアップロードする方法です。よろしくお願いします。
## やりたいこと
GoとEC2を使って、ブラウザでHello, World!するだけです。
こちらの記事を大変参考にしました。
https://qiita.com/Dragon-taro/items/09a67b93093770348ce5ローカルにGoは既にインストールされている前提です。
ちなみに、僕のGoのバージョンは1.16.6でした。## Goアプリの作成
ファイル構成“`
.
└── main.go
“`“`go:main.go
package mainimport (
“fmt”
“log”
“net/http”
)func main() {
http.HandleFunc(“/”
oapi-codegenでHash Map (additionalProperties) はどうexportされるか
Go言語で Open API 3.0対応の型情報を生成するとき、
[github.com/deepmap/oapi-codegen](https://github.com/deepmap/oapi-codegen)
を使ってます。あまりユースケースとしてやりませんが、マップを表現したい時があると思います。
Dictionaries/HashMaps の仕様はこれです。
[Dictionaries, HashMaps and Associative Arrays](https://swagger.io/docs/specification/data-models/dictionaries/)oapi-codegenの公式のReadmeでは、additionalPropertiesに関しては[一応対応している](https://github.com/deepmap/oapi-codegen#additional-properties-in-type-definitions)と書いてますが、
定義が実際にどう構造体として出力されるか見てみました。### 定義
“`
SpannerにおけるMutationの数え方
SpannerのMutationの数え方を調べたのでメモ
# Mutation
MutationはDBへの操作(Insert・Update・Delete)の単位として使われる言葉Transactionを使ってアトミックに複数のMutationをまとめて実行する際には20kMutation問題を意識する必要がある.
20kMutation問題とは,一つのTransactionで扱えるMutationが2万個までという制限のこと.# Mutationの罠
spannerパッケージにあるspanner.Mutationはコード上でInsertやUpdateなどの処理の単位を表しているが, Spannerの内部ではもっと細かい処理の単位に分解されるらしく, コード上で扱うspanner.Mutationの数を数えても20k制限対象のMutationの数とは一致しない.コードのMutationの数が20000個以下ならOKとかそういうことではない.“`golang
func write(w io.Writer, db string) error {
ctx :=
GoのHOTリロード機能(air)付きコンテナの環境構築
Goはコンパイラ言語なので`go build`でコンパイルが必要だが、パッケージを導入することでフロントエンドの yarn run watchみたいなHOTリロードができるらしい。
https://github.com/cosmtrek/air
https://github.com/oxequa/realize
調べてみたところ、realiseは2018年以降メンテされてない様子。。。
最近はメンテナンスが続いてる`air`の方が導入事例が多いようなので、air導入済みのgo環境をを作ってみました。### 作成する環境
– Go v1.16
– air v.1.27.32021年10月末時点ではGo v1.17が出ているのですが、airのGo対応状況が~1.16のため、合わせて下げています。
今回作成した環境のリポジトリ
https://github.com/hiro-lapis/go-docker
### ファイル構成
最終的なファイル構成は以下のとおりです。“`
src
│
├── app
│ ├── .air.toml
│ └── main.go
golangのTimeについて
これ「なんでそんなこと思ったの?」って言われそう。
も大したことはないですが、
「現在時刻を変数に入れたら、数秒たった後って時間って進むの?」
結論から言えば、`now := time.Now()`をした場合、
その時刻が変数nowに格納されて時間経過で変化がないです。以下、検証コード。
“`golang
package mainimport (
“fmt”
“time”
)func main() {
now := time.Now()
// 変数
fmt.Println(“before :”, now.Format(“2006-01-02T15:04:05Z07:00”))
// Timeオブジェクト
fmt.Println(“beforeNow :”, time.Now().Format(“2006-01-02T15:04:05Z07:00”))
fmt.Println(“2秒待ちます”)
time.Sleep(time.Second * 2)
// 変数
fmt.Println(“after :”, now.Format(“20
Raspberry Pi でブロックチェーンの実証実験を行う(その2)
—
【1960年生まれのおじさん日記】
60歳の定年退職後に再就職した現在の職場で ≪STM32(32bit汎用マイコン)≫でプログラム作成を
依頼され その後もRaspberry Pi でブロックチェーンを構築してと言われ 分からないことだらけ!
一応は、若いころから 製造業で働き 制御用ソフト や アプリケーションの作成をしたこともある
けれども・・・この年齢になって Raspberry Pi でブロックチェーンの構築などするとは思わなかったおじさんの
メモ書き記録。間違いも多々あるかと思いますが、お許しください。—
**はじめに**
CQ出版社刊:「ラズパイで作るブロックチェーン暗号化コンピュータ(2020年3月1日 初版) を参考にして
ブロックチェーンの実証実験を行った。
[(その1)は、こちらから](https://qiita.com/ytetsuo/items/8ebfdfbafcbad61e9b73)今回は、Windows側から / Raspberry Pi側から ブ
Golang(Gobot+Firmata+Arduino)でアナログメーターを作ってみる
# Golang(Gobot+Firmata+Arduino)でアナログメーターを作ってみる
こんにちは、最近は色々検索していて、ブラウザのタブを開きすぎて、フリーズしがちな毎日です。
今回は PC の状態を視覚的に素早く認識できる CPU,Memory,Disk の使用率を可視化するアナログメーターを前から気になっていた Gobot 等を使って実践してみました。成果物
https://github.com/Iovesophy/analog-meter-go
# Gobot セットアップ
Gobot とは
https://gobot.io/
> Next generation robotics/IoT framework with support for 35 different platforms
次世代 robotics/IoT フレームワークですね、
35のプラットフォームをサポートしている強力なライブラリです。1. Golang をインストールする
https://golang.org/doc/
Go言語でプライベートなGithubリポジトリにあるモジュールを利用し、DockerでBuildを行う方法
## 経緯
– Go 言語で開発したバックエンド API を Docker イメージにビルドしたい
– Go モジュールに社内で共有している非公開リポジトリにあるライブラリ(非公開ライブラリ)を含んでいる
– docker のイメージをビルドするとき、go mod download の箇所でライブラリにアクセスできないためエラーとなる## 原因
– Docker ビルド時に Gitの認証情報を含んでいないため、非公開ライブラリにアクセスできない
– マイPCにはGitアカウントの認証情報があるため、ローカル環境では問題なく go install が行える## 対応
– 秘密鍵を生成し、非公開リポジトリに公開鍵を設定する
– バックエンド API に、非公開ライブラリにSSH通信するための秘密鍵とSSHのconfigを配置する
– Dockerfile で 非公開ライブラリにアクセスするための設定を行う秘密鍵をGitリポジトリにおくことに抵抗がある人は、github の secrets を利用するなりしてください
### 秘密鍵を生成し、非公開リポジトリに公開鍵を設定
Raspberry Pi でブロックチェーンの実証実験を行う(その1)
【1960年生まれのおじさん日記】
60歳の定年退職後に再就職した現在の職場で ≪STM32(32bit汎用マイコン)≫でプログラム作成を
依頼され その後もRaspberry Pi でブロックチェーンを構築してと言われ 分からないことだらけ!
一応は、若いころから 製造業で働き 制御用ソフト や アプリケーションの作成をしたこともある
けれども・・・この年齢になって Raspberry Pi でブロックチェーンの構築などするとは思わなかったおじさんの
メモ書き記録。間違いも多々あるかと思いますが、お許しください。—
**はじめに**
CQ出版社刊:「ラズパイで作るブロックチェーン暗号化コンピュータ(2020年3月1日 初版) を参考にして
ブロックチェーンの実証実験を行った。
この書籍に記載されている流れが私にとっては、非常に理解し難いため ここに整理をして記載する。
※この記事を見ただけでは、出来ません!!
※是非、「ラズパイで作るブロックチェーン暗号化コンピュータ」を購入した上で参考に
【Golang】ラズパイ+ go-sdl2 で /usr/bin/ld: -liconv が見つかりませんエラー【静的リンクのビルド時】
# `/usr/bin/ld: cannot find -liconv` on go-sdl2 static build
> デスクトップ環境(X11)なしの RaspberryPi OS Lite 入りラズパイでスクリーン描画したい。
> [SDL](https://ja.wikipedia.org/wiki/SDL) という X11 の代替となるマルチメディア用のライブラリにスクリーンの描画機能があるらしい。ところが Go 言語(以下 Golang)で SDL を利用するために [go-sdl2](https://github.com/veandco/go-sdl2) を使うも、静的リンクでビルドすると「lib-iconv が見つかりません」とエラーが出るのです。
> でも `static` タグなし(`go build .`)だと、ビルドできるし、ターミナルに描画はできるのです。どうしよう。“`shell-session:静的リンクでビルドするとエラーが出る
$ go build -v -tags static -ldflags “-s -w” .
github.com/
go buildはできるのに、VSCodeでgolangのimportがエラーと表示される
めちゃくちゃ詰まったのでメモ。
## 事象
`go build`, `go run hoge.go`は正常に動くのに、VSCode上でimportが解決できないとエラーが表示される。
## 原因
VSCodeで複数のgoのリポジトリを開いているのが原因っぽいです。“`
VSCodeで開いているフォルダ
└ リポジトリその1
└ リポジトリその2
“`と開くと、`gopls`がうまく動かないみたいです。
(疲弊しきって深掘りする気力がなかった・・・)新しいウィンドウでひとつのリポジトリを開いたら解決しました。
複数のgoのリポジトリをひとつのウィンドウで開きたい場合は、
リポジトリその1をはじめに開いたあと、`Files > Add Folder to Workspace…`にて対応するとよさそうです。こんな使い方してたの自分だけなのかな・・・
http.ListenAndServeTLSでサーバが起動できずハマったが、エラー出力を自分で書いたらすぐに解決した
# 概要
Go初学者(私)が『[Go プログラミング実践入門](https://www.amazon.co.jp/Go%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A7%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B-impress-gear%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-Sheong-Chang-ebook/dp/B06XKPNVWV/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=go&qid=16355897
FreeBSDで AWS Session Manager Plugin を導入してみる
# FreeBSDでAWSセッションマネージャープラグインを導入してみる
## はじめに
[AWS Systems Manager Session Manager](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html)とは、
– 「AWSシステムマネージャー」サービスの一つであるところの、「セッションマネージャー」という機能である。
– これはAWS管理コンソールやAWSCLi等によりEC2等のインスタンスにアクセスまたはログインするための機能である。
– この機能を使用してインスタンスへアクセスすると、(グローバルIPでの)受信ポートの維持や、踏み台サーバーの用意、SSH鍵の管理が不要になる。
– バックエンドで稼動するインスタンスが多く、グローバルに公開して無い場合や、孤立した、いわゆるプライベートネットワーク内に設置されたサーバーにアクセスする場合に嬉しい、あるいは必要となる機能である。
– この機能の利用にあたり、対となる [Session Mana
Go言語 stringsパッケージ
#文字列チェック
#####■文字列に「,」が含まれているかをチェック
“`go:
if strings.Contains(“red,blue”, “,”) {
fmt.Println(“複数”)
} else {
fmt.Println(“単数”)
}// 複数
“`#文字列変換
#####■「,」区切りの文字列を配列(スライス)に変換
“`go:
colorArr := strings.Split(“red,blue”, “,”)
for _, v := range colorArr {
fmt.Print(v + “\n”)
// red
// blue
}
“`
go でGithub Copilot を軽く触ってみた
# なんの記事?
golang でGithub copilot の基本機能を使ってみたログと所感
# Github Copilot とは
“`
関数名とコメントから、関数のコードを丸ごと自動補完するAIプログラミング機能
“`https://copilot.github.com/
https://www.itmedia.co.jp/news/articles/2106/30/news063.html
# 基本操作
– `Tab`で補完
– `Option+]` (or `Option+[`) で次/前の候補 (Mac OS)
– `Esc` で補完を消す
– `ctrl + enter` で他の候補の一覧# 実際にgo で触ってみる
環境:VSCode, Mac
vscode でインストール後やることはシンプルでコードを入力してタブで補完するだけ。
提案方法には
– 関数名から補完する方法
– コメントから補完する方法があるようで、どちらも試してみた。
## 関数名で補完
func main() なんて書いてみると適当な加算のサンプルコードが提案さ
【Golang】相関係数の算出
## 概要
Goで相関係数を求める## 数理パッケージ
gonumはちょっと用途に合わなかったので、[montanaflynn/stats](https://github.com/montanaflynn/stats)のCorrelation関数を使う## 使い方
“`go
package mainimport “github.com/montanaflynn/stats”
func main() {
cor, _ := stats.Correlation([]float64{1, 2, 3, 4, 5}, []float64{1, 2, 3, 5, 6})
fmt.Println(cor)
// Output: 0.9912407071619302
}
“`