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

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

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

> ラズパイの 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 status

$ # 静的リンクしないなら大丈夫
$ go build -v .
$ echo $?
0
“`

## TL; DR <

元記事を表示

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システムマネージャー」サービスの一つ、「セッションマネージャー」という機能である。
– これはWeb・CLi等によりEC2等のインスタンスにアクセスまたはログインするための機能である。
– インスタンスへのアクセスに当たり、(グローバルIPでの)受信ポートの維持や、踏み台サーバーの用意、SSH鍵の管理無しにサーバーにアクセスすることが可能である。
– バックエンドで稼動するインスタンスが多くグローバルに公開して無い場合や、孤立した、いわゆるプライベートネットワーク内に設置されたサーバーにアクセスする時に嬉しいあるいは必要となる機能である。
– その代わり、対となる [Session Manager Agent](https:

元記事を表示

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

元記事を表示

初心者が使えそうだと思ったGoパッケージをまとめる

#はじめに
学習の一環としてGoの初心者がこれから個人開発をするにあたって使えそうだと思ったパッケージを逆引き的な感じでまとめました。
まだ途中なのでこれから開発が進むに連れてどんどん補充していく予定。

##timeパッケージ
Goの時間に関係するパッケージ
###時間を表示したい
“`Go
time.NOW()
//現在時刻を返す関数
//>>2021-10-24 16:02:29.28855 +0900 JST m=+0.000072118
“`

###特定の時刻を作成、表示したい
“`
t2 := time.Date(2020, 6, 10, 10, 10, 10, 0, time.Local)

//指定した時間を生成
fmt.Println(t2)
//>>2020-06-10 10:10:10 +0900 JST
fmt.Println(t2.Year())
//>>2020
fmt.Println(t2.YearDay())
//>>162
fmt.Println(t2.Month())
//>>June
fmt.Println(t2.Weekday())
//

元記事を表示

Github Actionsで、プライベートリポジトリのコンテナを使った自動テストを行う

# はじめに
世間には様々なCI/CDツールがありますが、GitHub Actionsは、GitHubを使用していれば気軽に導入できるため、使用している方は多いかと思います。
本記事では、DockerImageをプライベートリポジトリのGitHubコンテナレジストリに登録し、登録したDockerImage内で、GolangのUnitTestを動作させる方法を記載しています。

# 背景
筆者の開発環境は、VSCodeのDevContainerを使用しています。DevContainerはこちらの記事を参照してください。

https://qiita.com/kishibashi3/items/e20aecef45ed8341e739

開発には、ビルドに時間のかかるライブラリや、GitHubにコミットできない大容量の外部ライブラリが必要でした。DevContainerは、あらかじめ開発環境をDockerImage化することで、誰でも同じ環境で開発できます。
CIでも同様の環境を用意する必要があり、DevContainerを流用して、CI用の環境を作成することにしました。

# 手順
Do

元記事を表示

go get時にpackage embed: unrecognized import path “embed” (import path does not begin with hostname)が表示される

## go getでpackage embed〜が出る

“`
$ go get -u github.com/****/****
package embed: unrecognized import path “embed”: import path does not begin with hostname
“`

ちなみに、遊ぶ目的でojichatをインストールしようとしていた感じでした :joy: 笑
参考) https://github.com/greymd/ojichat

## embed packageとはなんぞや

リリースノート見てみると、go 1.16から追加された様子
https://go.dev/blog/go1.16

## バージョンを確認してみる

“`
$ go version
go version go1.15.14 linux/amd64
“`

ありゃ。
ということで、goのバージョンをあげます。
https://golang.org/dl/go1.16.linux-amd64.tar.gz

こちらからwgetでダウンロードしてきてイ

元記事を表示

relocation target type not definedが出たとき

Goのバージョン: 1.17.2

2021/10/24追記: 最新のmasterブランチで確認したところ、1.18では修正されて正常にビルドできそうです。

Go1.17を使用して、 `-gcflags=-G=3` を使ってジェネリクスの機能をonにしてビルドする際に
ジェネリクスな関数の中で、ジェネリクエスな引数を取るジェネリクスな関数を 匿名関数の中で呼ぶ場合に起きる(?)っぽい。

## どうするか

“`go:問題のコード
package main

func a[T any](t T){}

func b[T any](t T) {
func () {
a[T](t)
}()
}

func main() {
b[int](0)
}
“`

“`go:修正したコード
package main

func a[T any](t T){}

func b[T any](t T) {
a := a[T]
func () {
a(t)
}()
}

func main() {
b[int](0)
}

“`

ジェネリクスな関数を呼ぶ前に、変数に

元記事を表示

ディレクトリ、ファイルのコピーを Golang で書いてみる

# 概要
最近業務であるディレクトリの中身を丸ごとコピーしてたのですが、様々なサイトを見ても処理が分かりにくいものが多かったので今一度分かりやすいコードを書きたいと思います。
他の参考サイトを見ても分かりにくいと感じた点はおそらく以下の点です。

* 再帰処理の複雑さにより、各関数の役割が明確で無くなっている。

参考サイトによっては「ディレクトリを追加しながらファイルを読む関数」等があったりと個人的には分かりにくく、実際に業務においてレビューするのであれば指摘をするかなと。

# 環境
今回私が実行した環境は以下です。

* Go 1.16.8
* VSCode
* Windows10
* WSL2(Ubuntu)
* Docker Desktop

`Windows` の `Docker Desktop` を起動し、 `Ubuntu` 上でコンテナを立ち上げ、 `VSCode` のリモートコンテナより実行しました。
便利な世の中になりましたね。

なお、これから説明する完成したコードは以下に全て配置しています。

[GitHub – hfh3oa](https://github.c

元記事を表示

OTHERカテゴリの最新記事