Go関連のことを調べてみた2021年11月08日

Go関連のことを調べてみた2021年11月08日

【最速?】GoとEC2で「Hello, World!」

## やりたいこと
GoとEC2を使って、ブラウザでHello, World!するだけです。
こちらの記事を大変参考にしました。
https://qiita.com/Dragon-taro/items/09a67b93093770348ce5

## Goアプリの作成
ファイル構成

“`
.
└── main.go
“`

“`go:main.go
package main

import (
“fmt”
“log”
“net/http”
)

func main() {
http.HandleFunc(“/”, func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, “Hello, World!”)
})

log.Fatal(http.ListenAndServe(“:8080”, nil))
}
“`
## EC2の作成
以下、コンソール画面をポチポチしてEC2を作成する。

|項目|値|
|-|-|
|Amazonマシンイメージ|Amazon Linux2 AMI|
|インスタンスタイ

元記事を表示

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.3

2021年10月末時点ではGo v1.17が出ているのですが、
airのGo対応状況が~1.16のため、合わせて下げています。

### ファイル構成
最終的なファイル構成は以下のとおりです。

“`
src

├── app
│ ├── go.mod
│ ├── .air.toml
│ └── main.go
├── Dockerfile
└── docker-compose.yml

元記事を表示

golangのTimeについて

これ「なんでそんなこと思ったの?」って言われそう。

も大したことはないですが、
「現在時刻を変数に入れたら、数秒たった後って時間って進むの?」
結論から言えば、`now := time.Now()`をした場合、
その時刻が変数nowに格納されて時間経過で変化がないです。

以下、検証コード。

“`golang
package main

import (
“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 入りラズパイで、Go でスクリーン描画するために [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/veandco/go-sdl2/sdl
# github.com/veandco/go-sdl2/sdl
/usr/bin/ld: -liconv が見つかりません
collect2: error: ld returned 1 exit st

元記事を表示

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 main

import “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
}
“`

元記事を表示

【要約版】net/httpでつくるHTTPルーター自作入門

先日、[net/httpでつくるHTTPルーター 自作入門](https://zenn.dev/bmf_san/books/3f41c5cd34ec3f)という薄い本を書いたのですが、もっと手短に内容を伝えたいと思ったので、本の要約を書いてみました。

コードだけ見たいという場合は以下を参照してください。
[bmf-san/introduction-to-golang-http-router-made-with-net-http/blob/main/trie.go](https://github.com/bmf-san/introduction-to-golang-http-router-made-with-net-http/blob/main/trie.go)

合わせて筆者が自作したHTTPルーターも見てもらえると嬉しいです。
[bmf-san/goblin](https://github.com/bmf-san/goblin)

# 何の話?
Goで標準パッケージだけを使ってHTTPルーターを自作するための考え方とやり方の話です。

以下のようなHTTPルーターを自作します。
[

元記事を表示

【1】GolangでWebアプリケーションを作成する【MySQL/CRUD】

# はじめに
この記事は[GolangでWebアプリケーションを作成する](https://qiita.com/blackmax1886/items/7ca44fd1519dbac59dd2 “概要と設計”)の続きです。
今回はtaskのCRUDを作成します。

CRUDは主に[こちらのチュートリアル](https://www.golangprograms.com/example-of-golang-crud-using-mysql-from-scratch.html)を参考にしています。

# 環境
– go1.16.5 windows/amd64
– Goland
– MySQL Ver 8.0.26 for Win64 on x86_64

# 実装
## MySQL DBの準備
localにteamtaskというdatabaseと、その中にtaskテーブルを作成する。
とりあえずフィールドはnameとcontentのみ

“`sql
create database teamtask;
use teamtask;
create table task (id int, n

元記事を表示

【業務システム向け】とにかく実装量が少ないWEBテンプレート作った(フロントエンド編)

# はじめに
業務システムあるあるの機能がそろった
ログイン→一覧→登録、編集機能のWEBテンプレートを作りました。

![ログイン.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1734544/2b4782c7-06b6-2f18-31c0-dcb65cb70b8c.jpeg)

ログイン画面は非常によくあるIDとパスワードによる認証画面です。
デザインはSemantic-UIを使用しているためとてもスタイリッシュに仕上がっています。
フォームのバリデーションとそのメッセージ表示機能を備えています。

![ログイン2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1734544/a90d84a5-e0b4-efa8-e747-086eb70f7c31.jpeg)

トップ画面では機能の紹介を載せていますが、ここはプロジェクトによってダッシュボードに変わったりするかと思います。
全画面共通のヘッダからサイドメニュー、ロ

元記事を表示

openapi-generator-cli (go-server)

こちらで行ったことと同じことを go-server で行いました。
[openapi-generator-cli (python-flask)](https://qiita.com/ekzemplaro/items/457ce1c8b93aed53b4b7)

>hello.yaml は同じです。

#Go のサーバーを作成#

“`bash
npx @openapitools/openapi-generator-cli generate \
-g go-server \
-i ./hello.yaml \
-o ./src \
–api-package=api \
–model-package=model \
–additional-properties=withSeparateModelsAndApi=true
“`

コードの修正

“`go:go/api_hello_service.go
/*
* Hello
*
* ユーザ名を与えると挨拶を返してくれるAPI
*
* API version: 1.0.0
* Generated by: Op

元記事を表示

OTHERカテゴリの最新記事