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

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

【Golang】SQLite3 でテーブル名一覧と DB の総レコード数を取得する

> Go 言語(以下 Golang)の [database/sql 標準パッケージ](https://pkg.go.dev/database/sql)で SQLite3 で DB を作成したものの、動的に作成されたテーブルのため、**作成されたテーブル名の一覧を取得する必要がある**。しかも、何件登録されているか、**DB 内の総レコード数を後からでも確認する方法**がないものか。
>
> Go 1.18 以降、[ドライバーは、もちろん天下の mattn さんの “go-sqlite3″](https://github.com/mattn/go-sqlite3)。

[「”golang” “sqlite3” テーブル名 一覧 取得」でググって](https://www.google.com/search?q=%22golang%22+%22sqlite3%22+%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%90%8D+%E4%B8%80%E8%A6%A7+%E5%8F%96%E5%BE%97)も、SQLite コマンドの `.table` で確認する方

元記事を表示

GoのAPIGatewayでslackのslashコマンド発行時にリクエストを検証するサンプル

## 説明
– Bodyの中の`token`を使うこともできるが、非推奨とされている
– HMACを利用して自身のSlackから送信していることを検証できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/59702e7c-a77b-3dc2-5a1f-8ce7feb8f40e.png)

## イメージ
1. `v0::`の文字列に対して、`Signin Secret`で復号する
1. 1の値を`X-Slack-Signature`を比較して一致しなければ、リクエストから落とす

## サンプル

“`go
func CheckSlackSignature(request events.APIGatewayProxyRequest) error {
slackVersion := “v0:”
slackTimestamp := request.Headers[“X-Slack-Request-T

元記事を表示

【#50 エンジニア転職学習】WSL2でUbuntu20.04のGo開発環境をつくる

# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。

3回連続になりますが、Linuxの開発環境を整えようと思います。

バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。

https://qiita.com/Chika110/items/ef54dddd565a0193ef44

# 本日の学習内容
* **WSL2を使用してUbuntu20.04の開発環境構築 ←Topics!!**

# WSL2を使用してUbuntu20.04の開発環境構築
先日の投稿でVirtualBox上にUbuntu22.04を導入しました。
https://qiita.com/Chika110/items/9bc531bc3ed83784eae3

問題なく動いているように感じたのですが、全く負荷のかかる作業をしていない状態でも、
**ゲスト・ホストどちらともYouTube等の再生ができませんでした。
他にもBluetooth機器の接続がおかしくなるといった不具合も**でました

元記事を表示

ginの基本

# はじめに

goのWebアプリケーションフレームワークを触りながらメモしてみた。網羅的に学びたい場合は公式の[ドキュメント](https://github.com/gin-gonic/gin#gin-web-framework)をみた方が良いと思います。

# 準備

goをインストールする。windowsやmacだったら[公式サイト](https://go.dev/)からインストーラをダウンロードして実行、インストーラの指示に従っていけば特に迷うことなくセットアップできるはず。

エディタは[Visual Studio Code](https://code.visualstudio.com/)がオススメだけれど、好みに応じて選択すれば良いのではないかと思う。

続いて、開発用のフォルダを準備する。まず適当にフォルダを準備する。

“`bash
mkdir GinStudy
“`

そして初期化。

“`bash
cd GinStudy
go mod init GinStudy
“`

以降、全てこのフォルダ配下で作業する。

# とりあえず空っぽのサーバ

公式の[q

元記事を表示

Goのcryptoで暗号化(AES-GCM)された文字列をPHPで復号した

Goのaesパッケージ(crypto/aes)で暗号化された文字列を、PHPで復号したときのことを備忘録がてらまとめます。

# 前提
– Go 1.13
– PHP 8.0
– AES-256-GCM
PHP歴は1年超、Goは書けないけどなんとなく読める。
今回の平文は、仕様上すべてが短い英単語である。

# GoのAES-GCMの仕様
認証タグ(tag)が暗号化後のバイナリに連結される。
“`
[暗号][tag(16Byte)]
“`
ivとtagの長さは次のコードの153行目あたりで定義されている。
https://go.dev/src/crypto/cipher/gcm.go
“`
const (
gcmBlockSize = 16
gcmTagSize = 16
gcmMinimumTagSize = 12 // NIST SP 800-38D recommends tags with 12 or more bytes.
gcmStandardNonceSize = 12
)
“`

つまり、末尾16Byteをtagと

元記事を表示

[Go]ジェネリクス

# 概要
**同じコードで様々な型のデータを処理できるようにする** 機能。
動的型付け言語っぽく処理させることができる。
goではバージョン1.18から追加された。

関数の引数、返り値ともにその型を「型パラメータ」 + 「型パラメータリスト」で定義できる

**参考**

https://zenn.dev/nobishii/articles/type_param_intro

# 引数の型を「型パラメータ + 型パラメータリスト」で定義

**一般化したコード**
“`generaralized_argument_generics_sample.go

// [<型パラメータ名> <型パラメータの制約>]の部分が「型パラメータリスト」と呼ばれる部分
func <関数名>[<型パラメータ名> <型パラメータの制約>](<引数名> <型パラメータ名>) {
<処理>
}
“`

**具体的にジェネリクスを適用したサンプルコード**

“`argument_generics_sample.go
package main

import “fmt”

/*
* [概要] 引

元記事を表示

webhookを叩くだけのシンプルなLambdaを5つの言語で作ってみて実行速度を測る

我が社にて、cloud watchのalertを拾って、LambdaからIFTTTのwebhookに繋げてパトライトを光らせよう、っていうプチプロジェクトが走ろうとしております。

![スクリーンショット 2022-08-13 13.20.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308709/96ae713e-868f-6a59-91ff-2bfbd6bbf46c.png)

だいたいこちらの記事のような内容です。
https://kimama.cloud/2020/01/06/alarm2patlite/

ただ、今回はこのへんの事情は関係なく・・・

![スクリーンショット 2022-08-13 13.22.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308709/33dc51b1-853e-9f45-be5d-ef884f48dadc.png)

↑ここだけの記事です。Lambdaのみ。

##

元記事を表示

Docker Engine SDK でホストポートを範囲指定する

Docker Engine SDK でホストポートを範囲指定する
コードは Go 言語ですが、他の SDK でも困っていたら、試してみるとうまくいくかもしれません。

検索しても、いまいち解決していなさそう
https://stackoverflow.com/questions/63236679/unable-to-port-forward-with-the-port-range-syntax-in-docker-sdk

### `”80-85:80″`(ホストポートを範囲指定する場合)
Dockerfile で `EXPOSE` していても `ExposedPorts` が必要な模様
https://qiita.com/ryskiwt/items/27cb74f621c9e9ee18be#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E4%BD%9C%E6%88%90

起動途中や停止中に Docker Desktop 等で確認すると `localhost:80-85` と表記されるが、起動が完了すると正しく `0.0.0.0:80` や `0.0.0.

元記事を表示

Golangを使用したMySQLで設定したデータ型の注意点

## 概要

今回はMySQLを使用して、作成したテーブルのカラムのデータ型で`time.Time`型を指定した際の注意点を共有します。

## 前提

ディレクトリ構造

“`
.
├── models
│ ├── base.go
│ └── users.go
├── docker-compose.yml
├── Dockerfile
├── go.mod
├── go.sum
└── main.go
“`

今回はDockerを使用して環境構築をしています。

“`Dockerfile
FROM golang:1.19.0-alpine3.16
WORKDIR /app
COPY . .
“`

“`docker-compose.yml
version: ‘3.9’
services:
db:
image: mysql:8.0
container_name: mysql
env_file: .env
ports:
– 3306:3306
environment:
MYSQL_ROOT_PASSWO

元記事を表示

【Go】ビットを利用したフラグ管理

## 概要
Goでビット演算を利用したフラグ管理を行う実装を記述します。
複数指定可能なオプションを、constで定義している際などに使える便利な小技です。
Go以外でも、ビット演算を利用したオプション管理を実装している方は割と少なくないと思いますが、私自身これまでにビット演算を実装で使ったことがなく、「これは便利だわ〜」と感じたので、勉強ログ的なテンションで記述していきます。

## ビット演算子
|演算子|説明|
| :—: | :—: |
|x | y|x と y の ビット論理和|
| x ^ y |x と y のビット排他的論理和|
| x & y |x と y のビット論理積|
| x << n |x の n ビット左シフト| | x >> n |x と n ビット右シフト|

## 実装
“`Go
type AmazonPrimeOpt uint64

const (
Video AmazonPrimeOpt = 1 << iota Music Photos Reading Gaming ) ``

元記事を表示

GolangでCloudFrontのAliaseドメインを更新するサンプル

## メモ
– 実際にCloudFrontの構成情報を更新するためには、指定したい部分を更新するというよりかは、構成情報をすべて送るイメージで実装する
– そのため、一度構成情報を落としてきて、それに対し変更を加えて、それをPUSHするというような流れを組む必要がある
– ETagとよばれるトランザクション管理するような値があり、更新系メソッドには必要
– 参照系メソッドを呼んだときに一緒に返却される

## サンプル

“`go
package main

import (
“fmt”

“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/awserr”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/cloudfront”
)

func main() {
id := “XXXXXXXXXXXXX”
sub_domain := “test02”
hosted_zone_name :

元記事を表示

Dockerを使用してGoでMySQLに接続しようと思ったら詰まった話

## 概要

現在**Golang**を学習しています。その中で**MySQL**との接続に詰まってしまったのでその解決方法を共有したいと思います。

## 前提

私は基本的に学習するときはローカルの環境を汚したくないので**Docker**を使用しています。
なので今回もDockerを使用して行います。
なお今回は、Dockerの構成を最低限しか設定しません。

### Dockerfile構成

“`dockerfile
FROM golang:1.19.0-alpine3.16
WORKDIR /app
COPY . .
“`

### docker-compose.yml構成

“`docker-compose.yml
version: ‘3.9’
services:
db:
image: mysql:8.0
container_name: mysql
env_file: .env
ports:
– 3306:3306
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_

元記事を表示

gRPCについて調査してまとめた?‍?

# はじめに
以前から、[Firestoreのリアルタイム同期にgRPCが使われている](https://qiita.com/namusyaka/items/71cf27fd3242adbf348c#google-firestore)ことや、(仕事でよく使う)Google CloudでgRPCの知識を求められる機会が多く、知的好奇心と必要性の両輪でgRPCへの学びの機運が高まっていました。

本稿は大きく分けて二部構成です。
前半ではgRPC関連の文献やテキストを読んでまとめたgRPC入門を、後半ではgRPCを利用して実装したチャットについて書いています。
前後半は独立しているので、gRPC入門にのみ関心がある方は前半だけ軽く目を通すのが良いかと思います?‍♂️

![chat2x.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287774/01f9575e-af42-8af5-be83-66531cbe705a.gif)

# gRPC入門
## 概要
gRPCはGoogle発、Remote Proc

元記事を表示

Goの「クロージャ」とは

## はじめに

Goを触り始めてクロージャというものに遭遇しました。

どういう機能なのか、理解した内容を書きます。

## 結論

関数内で状態を保持する機能

## 詳細

### docsでは

>Closure occurs when an anonymous function in Go has access to its surroundings. Then it can hold a unique state of its own. The state then becomes isolated as we create new instances of the function.
クロージャは、Goの無名関数がその周囲にアクセスできるようになったときに発生します。そうすると、それ自身のユニークな状態を保持できるようになります。そして、その状態は、関数の新しいインスタンスを作成するときに分離されます。
[Closures in GoLang – GoLang Docs](https://golangdocs.com/closures-in-golang)

元記事を表示

【#49 エンジニア転職学習】VirtualboxでUbuntu22.04の開発環境をつくる

# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。

簡単なアプリケーション開発を続けていきますが、
その前にLinuxの開発環境を整えようと思います。

バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。

https://qiita.com/Chika110/items/ef54dddd565a0193ef44

# 本日の学習内容
先日は今まで使用していたCentOS7にGoやVSCode等の開発ツールを入れましたが、
Ubuntuも使ってみたいと思い1から作り直しました。
* **VirtualBoxを使用してUbuntu22.04の開発環境構築 ←Topics!!**

# VirtualBoxを使用してUbuntu22.04の開発環境構築
導入したツールは先日投稿したCentos7にいれたものと同じです。
**①VirtualBoxにUbuntuを入れて初期状態までいく ②VSCodeでGo Install/Update toolsを導入する ③My

元記事を表示

Golangでログイン機能を実装する。(Step3:Validationチェックの結果に応じて、レスポンスを変更する。)

### はじめに
[前回記事](https://qiita.com/kouji0705/items/daebf3d721d86ee54868)の続きです。
前回までにオウム返しのAPIを作成しました。今回はリクエスト内容のValidationを実施し、レスポンスを変更するAPIを作成します。

### 成果物
リクエスト成功
![スクリーンショット 2022-08-11 15.20.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/cba06c87-555e-33be-6d1f-a681d7f6b1a3.png)

リクエスト失敗
![スクリーンショット 2022-08-11 15.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/6bae0fbe-e106-ebda-d04a-c7a2bae15343.png)

### Hands-on
“`shell:ディレクトリ構成
~/g

元記事を表示

Retty サマーインターン2022参加記

# 概要
この記事は、Rettyサマーインターン2022の参加記です。バックエンドでの参加でした。

# インターン概要
– 3週間
– 基本オンライン・出社も許可を取れば出来る
– GoとgRPCでマイクロサービスを開発
– 新しいマイクロサービスを設計から
– チーム開発・モブプロ
# 学んだこと
学びしかなかったです。というか、知っている技術領域や設計・開発思想等が一つもなかったので、当たり前なんですが。よく採用してくれたな…
## TDD
今まで開発でテストを書くことがほぼなかったですが、初めて書きました。その勢いで(?メンターさんの宗派もあり?)後半のほうはTDDで開発を行いました。私的な観点ですが、TDDのメリットとして
– 振る舞いを定義してから実装に移れる
– 途中で、「こういう時は異常系?」「あれ、この場合って何が返ってくるんだ?」が起こりづらい
– 見通しを立ててから実装できる
のような点があると思います。一方、見通しを立てないと実装に移れない。というデメリットもあると思っていますが。
テストを書くメリットもかなり学ぶことが出来、大満足でした。テストは絶

元記事を表示

Golangでログイン機能を実装する。(Step1:APIで値を返却する)

### はじめに
[前回の記事](https://qiita.com/kouji0705/items/cda9038c6d6e2d3c4efe)に付随する記事となります。
前回の記事まででは、UIコンポーネントを利用してログイン機能のデザインのみを作成しました。API疎通するためのバックエンドのシステムを作成します。本記事ではGolangでAPIを作成します。

### 環境情報
“`
PC:M2 Mac Book Air
Golang:go version go1.19 darwin/arm64
“`

### HelloWorld出力
本記事では、go fiberを利用してAPIを作成します。fiberを利用しHelloWorldを出力します。

“`shell:ディレクトリ構成
~/go/src/fiber_login$ tree
.
├── go.mod
├── go.sum
└── main.go

0 directories, 3 files
“`

“`go:go.mod
module fiber_login

go 1.19

require github.c

元記事を表示

M2 MacでGolangをインストールする。

## はじめに
表題通り、M2のMacでGolangをインストールします。HelloWorldが出るまでを確認する記事です。

### 環境構築
[リンク](https://go.dev)より、Golangのインストーラをダウンロードする。
![スクリーンショット 2022-08-10 19.04.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/cb0b6fd7-9ccd-5ec7-7220-3de19a00c221.png)

![スクリーンショット 2022-08-10 19.05.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/9f0bff6f-32eb-943f-9a3b-11b0cab6dde8.png)
→Apple MacOS(ARM64)をダウンロードする。

インストーラーでインストールする。

“`shell:インストールの確認
~$ go version
go

元記事を表示

初心者向け Goの学習方法 改良版

## はじめに
別の記事でGoの学習方法について記載しました。↓
[Goの学習方法](https://qiita.com/bear05/items/cea61cd116ef94f14e07)

しかし、前回の学習だけでは個人でアプリ開発をするのに不十分だったと感じ、追加で学習しました。
前回の記事の内容と、追加して学習したこと、効率がいい学習方法は何か、考えたことを記載します。

## 学習方法 改良
### 1.Goについて調べる
 複数のサイトを読んで、そもそもGoはどんな言語かについてざっくりと調べました。

参考記事
・[Go言語とはどんなプログラミング言語?特徴やできることを解説](https://hnavi.co.jp/knowledge/blog/go/)
・[Go言語とは – 作れるものや特徴を知ろう](https://www.pasonatech.co.jp/workstyle/column/detail.html?p=7489)
・[Goのエキスパートが教えるGoの魅力、プログラミング基礎入門](https://flxy.jp/media/article/10744

元記事を表示

OTHERカテゴリの最新記事