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

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

Clarity Designを使ったWebシステムを作ってみる フロントエンド編

# 概要
「Clarity Designを使ったWebシステムを作ってみる」のフロントエンド編になります。
フロントエンド編ではClarityDesignを使ったAngularのフロントを実装していきます。

1. [準備編](https://qiita.com/strawberryjam/items/0b7afa1a53912ea08a96)
1. [バックエンド編](https://qiita.com/strawberryjam/items/6aad8155205a6c5531e9)
1. フロントエンド編(本記事)
1. デプロイ編

## 本記事の対象
– Clarity Designを使ってみたい方
– Angularで簡易的なアプリを作ってみたい方
– 本シリーズの続きを読んでくださっている方

## 本記事での作成物
本記事での作成物は以下gihubに上げております。
いくつか本記事上では割愛をしている部分もあるため、必要な場合はご参照ください。

https://github.com/murajo/DemoSurvey

# フロントエンド構成
## 画面構成
| #

元記事を表示

Clarity Designを使ったWebシステムを作ってみる バックエンド編

# 概要
「Clarity Designを使ったWebシステムを作ってみる」のバックエンド編になります。
バックエンド編ではGoのechoフレームワークを使ったREST APIを作成していきます。

1. [準備編](https://qiita.com/strawberryjam/items/0b7afa1a53912ea08a96)
1. バックエンド編(本記事)
1. フロントエンド編
1. デプロイ編

## 本記事の対象
– go言語でCRUD操作を行いたい方
– echoフレームワークでREST APIを行いたい方
– 本シリーズの続きで読んでくださっている方

## 本記事での作成物
本記事での作成物は以下gihubに上げております。
いくつか本記事上では割愛をしている部分もあるため、必要な場合はご参照ください。

https://github.com/murajo/DemoSurveyApi

# バックエンド構成
## DB構成
詳細なカラムは準備編を参照いただけたらと思いますが、以下3つのテーブルを対象としております。
– surveys
– survey_items

元記事を表示

Clarity Designを使ったWebシステムを作ってみる 準備編

# 概要
VMware社の製品のほぼ全てに使われているClarity Designというものを使った簡易的なWebシステムを作ってみようと思います。
必要スキルのAngularが初めてな部分もあり、Clarity Designを使っていてKubernetesのデモとかで使われるyelbというアプリと似たようなものをまずは目指していこうと思います。
https://github.com/mreferre/yelb

## 本記事の対象
– Clarity Designを使ってみたい方
– 簡単に良い感じの見た目のWebシステムを作成してみたい方

## 進め方
今回は以下の4章立てで進めていこうと思います。
※もしかしたら今後増やすかもしれないです
1. 準備編(本記事)
1. [バックエンド編](https://qiita.com/strawberryjam/items/6aad8155205a6c5531e9)
1. フロントエンド編
1. デプロイ編

本記事ではどんな画面構成にするかやDB構成等をまとめていきます。

## Clarity Designについて
今回主たる目的のC

元記事を表示

Golangでdlvが動作してない件(ブレイクポイントで止まらない件)(忘備録)

# PCの環境
“`
M1 MAC Monterey
Golang 1.17, 1.19
vscode
“`

# 経緯
1. Golangのバージョンを`1.17`から`1.19.3`にあげた
1. go delveのバージョンをvscodeを通じてあげた
1. デバックは動作するが、ブレークポイントでブレークされない

# 対応記録
1. golangバージョンを`1.17`に下げる
→ delveからバージョンが低すぎるとエラーが表示された

1. golangバージョンをbrew, goenv としてダウンロード
→ ブレイクポイントで止まらない

1. [vscode launch.json substitutePathの変更](https://github.com/go-delve/delve/issues/2795)
→ ブレイクポイントで止まらない

1. 現在ダウンロードされている全てのGolangを削除し、[asdf](https://asdf-vm.com/)でGolangを再度ダウンロード、パスを通す
→ ブレイクポイントで止まらない

元記事を表示

Alfred 5 + KeePassXCで爆速でパスワードをコピペする

![demo](https://user-images.githubusercontent.com/4987502/218909942-34f80265-de15-4338-8238-b7cd2d2d6ddf.gif)

この記事はMac環境な方を対象に書かれています。

# はじめに
パスワード管理って面倒。。
WebAuthnが2019年にウェブ標準として承認されてしばらく経ちますが、Webサービスでの認証は未だにパスワード(+多要素認証)が全盛ではないでしょうか。

普段のブラウザにパスワードを記憶させたり、秘密鍵が使える環境ならマシかもしれませんが、サイトによっては自動入力に未対応だったり、あらゆる状況でパスワードフリーな時代はまだまだ来なそうなので、Macユーザな私は長年 *KeePass(XC)* を愛用しています。

今回は、そんなKeePassの運用で感じた課題を拙作のツールで解決する方法を紹介したいと思います。

# KeePassの課題

サービス毎に一定のルールに沿ったパスワードを自動生成したり、ユーザ名やURLをまとめて管理したりと多機能な *KeePass*

元記事を表示

Docker+Go+Airの開発環境がうまく動かないのでゴリ押しした

ある日、Goを含むweb開発環境のDockerイメージを作ろうと思い立ちました。
実際に作成しようとしたのはnode.jsとGoの両方を含む開発環境なのですが、Goの部分でつまづいたところがあったので解決(したことにする)案を共有します。

想定する流れは以下の通りです。

1. Dockerイメージを起動
2. VS Codeでファイルを編集(Dockerコンテナの外側)
3. Dockerコンテナ内側のAirでホットリロード

DockerもGoのセットアップも慣れているので、組み合わせるだけですぐできるだろうと思っていました。

# つまづいたところ
Airがホットリロードしません。

`docker exec`を使用して内側から`echo “” >> main.go`などの変更を加えるとホットリロードします。
どうやらコンテナの外側からのファイル変更イベントがうまく走ってないようです。

# 環境
現象を確認したのは以下の環境です。
Macを使っている方やGo公式イメージを使用されている方の中にはAirがうまく動作している方もいるようなので、筆者の環境がよくない説はあります。

元記事を表示

クラス図とGoコード

# きっかけ
DDD関連の書籍を見てるとクラス図が頻繁に出てくるのだが、**「クラス間の関係を示す矢印だったり線の意味を知らなすぎ」** で理解の妨げになってる。
あと、基本的にJavaでサンプルコードが書いてあることが多いのだが、実務で使ってる **「Goだとそれぞれの関係についてどう実装すべきなのかイメージができてない」**。

このままじゃ勉強もはかどらんし実務に落とし込むのも難しいしということで、情報収集して自分の中で一回整理してみようと決意。

# クラス間の関係を表す線の意味を整理

線|名前|意味
—|—|—
——-▷|実現|「インターフェースと実装」の関係。「実装——-▷インターフェース」というように表す
───▷|汎化|「子クラス-親クラスの関係」。「子クラス───▷親クラス」というように表す。
——->|依存|クラス間にそこまで強い関係はないものの、一方のクラスを変更した際にもう一方のクラスも変更の必要が生じること
───>|関連|参照関係を示す。クラスAはクラスBを参照し、クラスBからはクラスAを参照できない状態のとき、「クラス

元記事を表示

GolandのWSL環境利用によるデバッグ

**やりたいこと**
WindowsにインストールされているGoland(jetbrains製IDE)でWSL環境を利用してデバッグする。
⇒Linux環境でないと動かない場合に便利

**Windows環境でテスト**
都合によりWindows環境では失敗…
![222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114591/c761f24c-5e81-8293-cd1d-61b6bde9eae4.png)

**WSL2(ubuntu20.04)環境でテスト**
「実行構成の編集」選択
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114591/dcedc79e-c77f-dd9d-aa14-c278c735d685.png)

実行場所:「WSL」選択
![333-be.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

ハンズオン Linuxのしくみ

Linuxから目を背け続けていたのですが、お仕事で必要になったってしまったので、
うさぎのアイコンの方が著者の ”Linuxのしくみ” を試して理解しようと思います。

# 環境
作業用のメインPCのTeratermから、ミニPCのUbuntuにアクセスします。
・ミニPC: 8GB DDR, 128G SSD, Intel N5095
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/b74b80f4-2ae8-74cb-7f56-d8006a347444.png)

詳細手順は下記。
https://qiita.com/nekokane/items/610294ce18e9

元記事を表示

【競プロ】Goで配列をstringで出力したいとき

## 概要

Goで競プロをしている際、配列を文字列として出力したいときがありました。
e.g.
NG: `[“a”,”b”,”c”]`
OK: `a b c`

## 本題

[yoshi389111](https://qiita.com/yoshi389111) さんからより良い方法を[コメント](https://qiita.com/akima1001/items/aae97136aaf508c1c255#comment-d4ae84b7eea374d9d8e7)にて教えていただきました!

> “`strings.Join()“`を使った方が良いのではないでしょうか?

まさしくそのとおりでした!
Goにもjoinはそりゃあるよね…

https://pkg.go.dev/strings#Join

“`
s := strings.Join(arr, ” “)
“`

Intの配列の場合は以下の方法。
配列のまま文字列として出力後、[]を取り除く。

“`
s := fmt.Sprintf(“%v “, arr)
s = strings.Replace(s, “[“

元記事を表示

Golang初心者向け!mapの基礎から応用

## はじめに

Go言語のMapは、非常に便利なデータ構造であり、多くのアプリケーションに使われることがあります。この記事では、GolangのMapの基礎的な使い方と応用をまとめます。

## Mapの基礎的な使い方

Mapを使うには、最初に `make()` 関数を使って新しいMapを作成する必要があります。新しいMapは以下のように作成できます。

“`
//make(map[key名]value)の型名
intMap := make(map[string]int) //valueがint型
stringMap := make(map[string]string) //valueがstring型

“`

Mapの要素を追加するには、`[key] = value` の形式を使用します。以下のように追加することができます。

“`
m[“foo”] = 10
“`

Mapから値を取得するには、`[key]` の形式を使用します。以下のように取得することができます。

“`
value := m[“foo”]
“`

## Mapのネスト

Mapを使うと、複雑なデー

元記事を表示

【個人開発】LINEでURLを送るとNotionに保存してくれるLINEBot「記事のストックくん」を作りました。

stock_title.png

**「この記事、後で読み返したい!」**
そんなとき、みなさんどうしてますか?

僕ははてぶやTwitter、Podcastをよく使うのですが
「今じっくり読める状態じゃないから、とりあえず保存しておきたい!」みたいなことが結構あります。

いや、ありました。このLINEBotを作るまでは…

今回は **「LINEBot 〇〇くん」第二弾「記事のストックくん」** のご紹介です。

>↓第一弾はこちら
【個人開発】ごみのお知らせをしてくれるLINEBot「ごみのお知らせくん」を作りました。
[https://qiita.com/wallkickers/items/7bf00de66f802503f957](https://qiita.com/wallkickers/items/7

元記事を表示

Go で Azure Storage Blobを扱うときの覚え書き

# Go で Azure Storage Blobを扱うときの覚え書き

azblobに関する、備忘録代わりの記事です。(古い記事やパッケージなどが検索に紛れてきてしまうので)

SDKのリポジトリは以下にあります。執筆時点で v1.0.0 が最新です(ちょうど執筆前にリリースされたようです) 以前のバージョン(v0.5 とか v0.6)を使っている人はアップデートするとよいでしょう。

– https://github.com/Azure/azure-sdk-for-go/tree/main/sdk/storage/azblob#readme
– https://github.com/Azure/azure-sdk-for-go/releases/tag/sdk%2Fstorage%2Fazblob%2Fv1.0.0

パッケージは以下にあります。
– https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

`azblob`と検索すると、古いバージョンが先にヒットしてしまう場合がありあますが、理

元記事を表示

OpenAIのAPIで自然言語(日本語)を使ってDBに問い合わせるCLIツールを作ってみた

## 概要

ChatGPTで話題になっているOpenAIが提供しているAPIを使って、自然言語(日本語)でデータベースに問い合わせすることができる[CLIツール](https://github.com/dotneet/natuql)を作成してみました。Go言語で実装しています。記事内で使い方と仕組みの説明をします。

https://github.com/dotneet/natuql

## 動機

ChatGPTがデータベースを理解することに驚いたことや、[gpt-index](https://github.com/jerryjliu/gpt_index) の仕組みなどを調べていて、自然言語でのDB問い合わせは比較的簡単に実現できそうで未来的な面白さを感じたので実験的に実装してみました。自然言語を使ってSQLクエリを発行できれば、SQLを書けない人でも柔軟にDBから情報を取得できるようになります。非エンジニアが分析を行うときのハードルを相当下げることができます。おそらく似たものは既に存在するのだと思いますが、ノンガチ勢でもこういったものが簡単に作れる時代になったのは本当に素晴らしい

元記事を表示

【Go】ハードコードしているSQLをバイナリに埋め込んですっきりさせよう

## はじめに

Goを書いていて、実行するSQLをハードコードしていることはないでしょうか

例えば、短いSQLだとこんなかんじ

https://pkg.go.dev/database/sql#example-DB.QueryContext

“`go
age := 27
rows, err := db.QueryContext(ctx, “SELECT name FROM users WHERE age=?”, age)
if err != nil {
log.Fatal(err)
}
“`

この例であれば、構文ミスがあっても実行前に気づくこともあるでしょう

ただ、次のように複数行にわたってSQLを書いてしまうこともあるのではないでしょうか

“`go
sqls := []string{
`UPDATE employees
SET salary = 5000;
`,
`UPDATE employees
SET salary = salary * 1.1
WHERE salary <= 10000; `, `UPDATE e

元記事を表示

GoでCLIを実行後にターミナルを閉じる

## やりたいこと

“`main.go
import “fmt”

func main() {
fmt.Println(“hello world.”)
fmt.Println(“Bye bye~”)
}
“`

上記ファイルを`go build`してできたCLIを実行すると、コマンド実行後はこのように表示される。

“`
hello world.
Bye bye~
logout

Saving session…
…copying shared history…
…saving history…truncating history files…
…completed.

[プロセスが完了しました]
“`

このCLIを実行後にターミナルウィンドウを閉じたい。

## やり方
この挙動はMac自体のターミナル設定によるもので、コマンドで指定はできない。

ターミナル > 設定 と進み
もう怖くない!Goのポインタを理解しよう!

## はじめに
僕がGoを触っていてまず最初に躓いたのがポインタでした。
「なんか値が上手く変わんない?」「あれ、今回って`&`だっけ?それとも`*`だっけ?」「ん?なんかsliceが変な挙動を示す?」
気づいたら色々な壁にぶつかって、ポインタはよく分からないしなんか怖いものと思っていました。
Goを初めて学ぶ人でそう思う人は僕以外にもいるはず!笑

ということで今回はそんな恐怖とおさらばしようという記事です!
Goのポインタで苦しんでる方、一緒にポインタを理解していきましょう!

**目次**
– [そもそもポインタって何?](#そもそもポインタって何)
– [関数とポインタ](#関数とポインタ)
– [sliceとポインタ](#sliceとポインタ)
– [sliceの構造](#sliceの構造)
– [append時のslice](#append時のslice)
– [mapとポインタ](#mapとポインタ)
– [おわりに](#おわりに)
– [参考文献](#参考文献)

## そもそもポインタって何?
[A tour of Go](https://go.dev/tou

元記事を表示

Go言語で最速のJSONデコーダーを作った話

## はじめに

こんにちは。Sugawara Yuutaです。今回は高校の休み時間に考え、空いた時間で作ったJSONデコーダーについて紹介したいと思います。
知ってる限りでは、汎用型受け入れ型をとっているデコーダー(つまり、標準パッケージと同じスタイルという意味です)の中では最速です。

## モチベーション

Go言語で開発を始めて、(Go言語のコミュニティーのスタイルがJavaScriptなどと比べるとなんでも標準ライブラリでやってしまうようなのにも関わらず)サードパーティー製のJSONデコーダーが多く作られていることに驚きました。

しかし、大規模なものから小規模なものまで試してみて、それぞれが必ずしも共通しているとは限らない、たくさんの問題を持っていることに気づきました。それについては下のセクションで詳しく取り上げます。

## 今までのJSONデコーダーが持つ問題

具体的なライブラリの名前は出さないでおきます。

– CPU依存(アセンブリを使ったりして、速くなる可能性を得る代わりにamd64以外が対応されなくなったりします。例えばM1やRaspberry Piはarm6

元記事を表示

GCP, Cloud RunでgRPCのサービスを動かす & サービスアカウントによりアクセス制御する

# はじめに
Cloud RunでgPRCのサービスを動作させます。
かつ、サービスアカウントによるアクセス制御をほどこします。

# 構成と検証ステップ

下図のようなフロント/バックともにCloud Runの構成とします。
フロントはHTTPS、バックはgRPCでリクエストを受け付けます。

![figure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1950110/176ca430-8671-bba1-00d4-559e3a15b392.png)

フロント、バックの機能は以下のとおりです。

| コンポーネント | 機能 |
|-|-|
| バック | ランダムな緯度、経度の組み合わせを返す |
| フロント | 上の緯度、経度を中心とした地図を表示する (Google Maps使用) |

以下のステップで検証を進めていきます。

| ステップ | 構成 | フロントからバックへのアクセス可否 |
|-|-|-|
| 1 | フロント、バックともに認証不要 | OK |
| 2 | バッ

元記事を表示

[Go][備忘録] sliceをmake()する方法による挙動の違い

# はじめに

Go初心者です。
学習していて、今後つまずきそうと思ったのでメモしておきます。

# make()方法による挙動の違い

`make()`を使用してsliceを作成する場合、第2引数に`length`、第3引数に`capacity`を渡すようにしないと、`int`の初期値である`0`で埋められたsliceが作成されてしまう。

`make()`にsizeだけ渡す場合

“`go
package main

import “fmt”

func main() {
var s []int
s = make([]int, 5)

for i := 0; i < 5; i++ { s = append(s, i) fmt.Println(s) } fmt.Println(s) // -> [0 0 0 0 0 0 1 2 3 4]
}
“`

`make()`にsizeとcapcityどちらも渡す場合

“`diff_go
package main

import “fmt”

func main() {
var s []int
– s = m

元記事を表示

OTHERカテゴリの最新記事