- 1. GCP, Cloud RunでgRPCのサービスを動かす & サービスアカウントによりアクセス制御する
- 2. [Go][備忘録] sliceをmake()する方法による挙動の違い
- 3. GoでSMTPを使用したメール二段階認証ページを作ってみた
- 4. Docker on WSL2でawesome-composeのnginx-golang-mysqlを立ち上げる
- 5. Asterisk AGIでGo言語を使う方法
- 6. CKADを駆け抜けろ!kubectl短縮コマンドを体に叩き込むツールを作った
- 7. 構造体の埋め込みを GORM で利用すると便利
- 8. DDDとは?GOとは?って状態からAPIのユニットテストをつくってみた
- 9. GOを使ってLaravelのSeederクラスを生成するプログラムを作った
- 10. 【Golang】go.mod file not found in current directory or any parent directory.の対処法
- 11. helper = osxkeychainしながら自作のプライベートリポジトリーをGoで使う方法
- 12. 一周年記念に”THE FIRST CODE”を完走した感想
- 13. Golang、PresignURLでファイルをアップロードするときハマったところ
- 14. Bun, Deno, Go, Node, Rust, Zig: ベンチマーク
- 15. gorm.DeletedAt と Delete をあれこれ検証してみた [GORM]
- 16. 機械学習で歌舞伎町ライブカメラの人流を3D化してみる
- 17. シーク法のgoでの実装
- 18. VSCodeのGo言語デバッグで、”go: cannot find main module…”とエラーが出る【M1Mac】
- 19. gin + mysql + dockerでconnection refusedエラー
- 20. Go 基本
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 mainimport “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 mainimport “fmt”
func main() {
var s []int
– s = m
GoでSMTPを使用したメール二段階認証ページを作ってみた
# GoでSMTPを使用したメール二段階認証ページを作ってみた
Goでユーザー名/パスワード認証とワンタイムパスワードを使用した二段階認証を作ってみました。イメージをつかむためのテストとして作成したものでそのまま使用できるようなものではありませんが、ご参考になればと思います。また、駆け出しなのでプログラムのミスや単語の誤用があるかと思いますので、コメントにてご指摘頂けると嬉しいです。
## 開発環境
* OS
* Microsoft Windows 10
* エディタ
* Visual Studio Code
* Go SDK
* go1.20 windows/amd64## SMTPサーバーについて
SMTPサーバーは何でもよいのですが、試験的に使うものなのでGmailを利用しました。GmailのSMTPサーバー機能を使用する場合、以前は普段のログインと同じパスワードが使用できたのですが、現在はアプリパスワードを取得する必要があります。アプリパスワードの取得方法は本筋から逸れる内容ですので割愛します。筆者は以下のサイトを参考にアプリパスワードを取得しました。
Docker on WSL2でawesome-composeのnginx-golang-mysqlを立ち上げる
Dockerの勉強を兼ねていろんなサーバを構築して遊んでいるのですが、次のような素晴らしい(awesome!な)リポジトリがあったので、早速試しました。
https://github.com/docker/awesome-compose
基本的には好きなディレクトリに入って “` docker compose up -d “` するだけなのですが、自分の環境(WSL2)では少々詰まってしまったところがあったので、備忘録として残しておきます。
この記事では、アプリケーションサーバにGo、プロキシサーバ(Webサーバ)にNginx、データベースサーバにMySQLを使ったアーキテクチャ “` nginx-golang-mysql “` を立ち上げてみます。
### git clone & ディレクトリに入る
“`
$ git clone https://github.com/docker/awesome-compose.git
$ cd awesome-compose/nginx-golang-mysql/
“`### docker compose実行
“` doc
Asterisk AGIでGo言語を使う方法
# 1. AGIファイルを用意する
“`agi.go
package mainimport (
“log”
)func main() {
log.Println(“AGI TEST”)
}
“`# 2. AGIファイルをビルドする
“`
# $ go build agi.go$ ls
agi.go
agi
“`# 3. extension.confでビルドしたバイナリを指定する
“`extensions.conf
same => n,AGI(agi)
“`
CKADを駆け抜けろ!kubectl短縮コマンドを体に叩き込むツールを作った
# TL; DR
“`bash
# リソース名が長い!
$ k get replicasets
ERROR: too long! should be `kubectl get rs`# オプション名が長い!
$ k get rs –namespace foo
ERROR: too long! should be `kubectl get rs -n foo`# ヨシ!
$ k get rs -n foo
NAME DESIRED CURRENT READY AGE
nginx-76d6c9b8c 1 1 1 23h
“`https://github.com/Syuparn/kuberta
# はじめに
CKADは、k8sを利用するアプリケーション開発者向けの試験です。
https://training.linuxfoundation.org/ja/certification/certified-kubernetes-application-developer-ckad/
最
構造体の埋め込みを GORM で利用すると便利
## 構造体の埋め込み
“`go
type A struct{}func (A) Execute() { println(“A”) }
type C struct { A }
func Test(t *testing.T) {
c := C{}
c.Execute()
}
“`上記のコードは正しく動作します。
このように、構造体を別の構造体に埋め込むことを Struct Embedding と呼びます。## GORM での利用
GORM では、構造体からテーブル名を得る際に、構造体の `TableName` メソッドが使われます。
たとえば次のコードを書いたとき、GORM は `a` というテーブル名を得ます。“`go
type A struct{}func (A) TableName() string { return “a” }
“`Struct Embedding により、以下の `B` 構造体は、外から見ると `TableName` メソッドを持つかのように見えます。
“`go
type A struct{}
type B str
DDDとは?GOとは?って状態からAPIのユニットテストをつくってみた
# テストコード
今回は[DDDとは?GOとは?って状態からAPIをつくってみた](https://qiita.com/tauemo/items/87e34c5a7d631236ab4d)で作ったプログラムにテストコードを作ってみます。
まず、テストコードはどこからどこまで作成するのか、と言うのが大きく意見が分かれてくるところです。
個人的にはテストコードを書くなら、徹底的に書く。書かないならまったく書かない。と言うのが好きです。と言うのは、引き継いだプロジェクトで「テストコード書いててCI環境も構築してコミットしたらテストコードが走るようになってるから。」と言われて安心してたんだけど、テストコードは中途半端に実装されているだけで、当然バグとして発見されるべきものが発見されず、リリース後に気づくということが頻発したことがありました。
テストコードのおかげでバグを見つけられることもあり、捨てるのはもったいなく、メソッドに変更を加えるとテストコードの変更も加えないといけない、時間のある時にテストコードの漏れを補っていかないといけない。手動のテストもやらないといけない。と言う経験があ
GOを使ってLaravelのSeederクラスを生成するプログラムを作った
最近、GOを学習しているのと、csvファイルのデータからLaravelのSeederを作成するタスクがあったので、Seederを作成するツールをGOを使って作ってみました。
## 作ったソース
ついでに、DBからデータを取得し、Seederを作成するプログラムも作りました。
使い方は、README.mdを参照してください。https://github.com/murapon/generate_seeder_by_golang
## 参考にしたサイト
https://qiita.com/ikawaha/items/28186d965780fab5533dhttps://chat.openai.com/chat
を使って、回答を得た。スネークケースのファイル名をアッパーケースに変更する方法
![スクリーンショット 2023-02-08 17.59.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37929/358e0ba1-f95b-64c6-5903-526059b7780f.png)
【Golang】go.mod file not found in current directory or any parent directory.の対処法
## はじめに
最近Golangの学習を始めました。ざっと[A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)を一通りやったので、実際に何かを書いてみようと思い、Go+Gin+Gorm+Mysql+Docker+Nginxで簡単なAPIを作成しようとしていました。そんな時に下記のようなエラーに遭遇したので、備忘録がてら記事にします。## 実行手順とエラーの内容
さて、簡単なREST APIを作成するために、Dockerで環境を構築しようと下記のように最小構成でDockerfileを記載しました。“`dockerfile:Dockerfile_修正前
FROM golang:1.20.0-bullseyeWORKDIR /data
RUN apt-get update \
&& apt-get install git \
&& go get github.com/gin-gonic/gin \
&& go get github.com/jinzhu/gorm \
&& go get
helper = osxkeychainしながら自作のプライベートリポジトリーをGoで使う方法
## 検証環境
* macOS Monterey バージョン 12.4(21F79)
* git version 2.32.1 (Apple Git-133)
* go version 1.19.1 darwin/amd64## 導入
[macOSのキーチェーンアクセスに自作のプライベートリポジトリーのユーザー名やパスワードを登録](https://support.apple.com/ja-jp/guide/keychain-access/kyca1120/mac)し、[Gitに`helper = osxkeychain`を設定してそれを読み込ませることで自動的にログインする](https://qiita.com/yurachika2020/items/4453fbf20b49fb93fcff)と便利です。
これを使って`go get`や`go build`ができたらどんなに良いかと思い、実行してみたら以下のようなエラーにぶち当たる人は多いでしょう。
“`zsh
% go build
go: git-codecommit.ap-northeast-1.amazonaws.com
一周年記念に”THE FIRST CODE”を完走した感想
# `THE FIRST CODE` ってなあに?
`THE FIRST CODE` という遊びを皆様ご存知でしょうか?
「一度だけの実行しかできない条件で、指定のプログラムコードを開発する」という、プログラミング系Youtuberの間で流行っている遊びです。
音楽系Youtubeチャンネルの `THE FIRST TAKE` をモジったタイトルになっています。YoutubeやTwitterで #thefirstcode というタグで検索するといろいろな方がUploadしている動画を見ることができます。
# ゆにるユニ一周年記念でやってみた!
ところで私はゆにるユニ、IT TechLeadのVTuberです。はじめましての方ははじめまして!
普段は [プログラミング言語を作った](https://qiita.com/yuniruyuni/items/2c4aa81097a4e5578d46) り、Yuniru’s HackerNews Summaryとして、ハッカーなニュースを毎週まとめてお伝えしています。。。!実は2月5日に一周年を迎えたので、その日の遊びとして `T
Golang、PresignURLでファイルをアップロードするときハマったところ
GolangでPresignURLを使ってファイルをアップロードすると下記のエラーが出てしまい
“`
NotImplemented
A header you provided implies functionality that is not implemented
Transfer-Encoding
“`RequestのHeaderをDumpすると`Transfer-Encoding:chunked`になってる。この値だとAWS側が対応してないみたいです。
## 解決方法
go version 1.19
“`
req.ContentLength = #content size <- ファイルのサイズ値を設定する ``` ContentLengthを設定するだけで解決しました 因みに、`req.Header.Set("Content-Length", xxx)`を設定しても解決できないです。これのせいで結構ハマりました理由です。 Full Codeはここです
Bun, Deno, Go, Node, Rust, Zig: ベンチマーク
# Bun, Deno, Go, Node, Rust, Zig: シンプルな Web Server ベンチマーク
vim-jp slack の #lang-go で、Go vs Node が土日に繰り広げられていました(月曜日気づいた)。
mattn さんが、Go と Node の速度を比較するベンチマークを書いていたので、それを bun, deno, go, node, rust, zig で書いてみました。
(zig わからないので未完成です ?)https://github.com/ekusiadadus/bench-web-server
## ベンチマーク
### Apache Bench
| Language | Requests per second | Time per request |
| :——- | :———————- | :—————- |
| bun | 11793.40 [#/sec] (mean) | 0.848 [ms] (mean) |
| deno |
gorm.DeletedAt と Delete をあれこれ検証してみた [GORM]
# はじめに
Go言語のORMパッケージとして、[GORM][GORM] があります。
「データの取得」「論理削除」「物理削除」について色々検証してみたので、その結果を共有します。# 前提
– Go言語をある程度触ったことがある
– [GORM][GORM] パッケージをある程度触ったことがある
– 主に、`gorm.DeletedAt`とその周辺について話します
– データベースの内容は、VSCode 拡張機能の [MySQL](https://marketplace.visualstudio.com/items?itemName=cweijan.vscode-mysql-client2) で閲覧します
– [Gin][Gin] パッケージを触ったことがある
– 最終的にAPIレスポンスとして検証するので、Gin を使います
– APIへのリクエストは、VSCode 拡張機能の [RESTClient](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) を用います
– 論理
機械学習で歌舞伎町ライブカメラの人流を3D化してみる
# はじめに
この記事は「画像処理系の技術をつかってなにか作ろう!」というゆるい授業で作成したグループ自由課題を抜粋・一部改変して投稿したものです。
モデルの考案やシステムの開発は自分で行いましたが、Introductionでの調査や、実地測定はグループメンバーに手伝ってもらっています学術論文っぽい体裁になってますが中身はエンジョイ企画なので軽い気持ちで読んでいってください!
先に結果をみたい方は[こちら](#-results)!!
# ? Abstract
本プロジェクトでは莫大なサイズにもなりうるデータを利用価値を落とさずに、すなわち特定の人物の追跡などが可能な質を保ったまま効率的に保管・処理する手法を提案する。
新宿歌舞伎町に設置されている2台の防犯カメラに映る通行人を検出し、防犯カメラの仰俯角・方位角を推定した上でそれらの座標を3次元座標に変換した。複数の防犯カメラ映像から得られる座標群を合成することで2カメラに映る人物の同一判定を自動で行い、人流の追跡に十分な精度の3Dマッピングに成功した。
また、チェス盤模様のボードを用いる従来のカメラキャリブレーションでは、
シーク法のgoでの実装
## 背景
DBからページネーション用のデータのリストを取ってきたい機会がありました。今までDBを全然扱ってこなかったので、色々調べていると、offset法とシーク法が主な実装方法で、**offset法はクソ遅い**ということがわかりました。そこで、シーク法をGoで実装したときのコードを共有したいと思います。
offset法とシーク法の比較についての資料は、以下の3つの資料がわかりやすかったです。
– [OFFSETは前の行を読み飛ばすのにはよくない方法](https://use-the-index-luke.com/ja/sql/partial-results/fetch-next-page)
– [offsetでページネーションは遅い。これからはシーク法だ!](https://qiita.com/madilloar/items/b4e786a932ef9d4551b9)
– [で、オフセット法に比べてシーク法のページネーションはどれだけ早いの?RDB毎に。](https://qiita.com/madilloar/items/5625e61cf3e348d08ef8)## 方法
VSCodeのGo言語デバッグで、”go: cannot find main module…”とエラーが出る【M1Mac】
# VSCodeのGo言語デバッグで”go: cannot find main module…”とエラーが出る【M1Mac】
## 環境
MacBook Pro (2021)M1Pro## 原因
おそらく環境構築した時に入力されたPATHにデバッグしようとしているディレクトリが入っていない事によるエラー?(拙い英語力で曲解)## 解決策
VSCodeの設定settings.jsonに設定を追加する### 1 設定画面を開く
ステータスバーの”Code”>”基本設定”>”設定”を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125452/83fddb94-8ed7-9e1c-3bdb-2e433aaafd71.png)### 2 settings.jsonを開く
VSCode右上のファイルみたいなマークが目印
![スクリーンショット 2023-02-05 17.11.41.png](https://qiita-image-store.s3.ap-northea
gin + mysql + dockerでconnection refusedエラー
gin + mysql + dockerで環境を構築した際に遭遇したconnection refusedエラーと対応について記載する。
# 問題の概要
docker-compose.ymlでdepends_onを使い、mysql → goの順に起動するよう制御しているつもりが、
mysqlの起動を待たずにgoが起動してしまい、connection refusedで落ちる。# TL;DR
docker-composeのconditonとhealthcheckを使うことでmysqlの起動を待ってからgoを起動させることに成功。
下記のようにapp/depends_onの`condition`とdbの`healthcheck`を追記した。“`yaml:対処前のdocker-compose.ymlのdepends_on
services:
go:
depends_on:
– dbdb:
(通常通りの設定)
“`“`yaml:対処後のdocker-compose.ymlのdepends_on
services:
go:
de
Go 基本
Goのプログラムは、パッケージ( package )で構成されます。
プログラムは main パッケージから開始されます。規約で、パッケージ名はインポートパスの最後の要素と同じ名前になります。 例えば、インポートパスが “math/rand” のパッケージは、 package rand ステートメントで始まるファイル群で構成します。
Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前( exported name )です。
関数は、0個以上の引数を取ることができます。
この例では、 add 関数は、 int 型の2つのパラメータを取ります。
変数名の 後ろ に型名を書くことに注意してください。x int, y int
を
x, y int へ省略可能関数は複数の戻り値を返すことができます。
func swap(x, y string) (string, string) {
return y, x
}Goの
Named return value
Goでは、関数の戻り値に名前をつけ