- 1. Goでgorilla/mux使用時、URIの「/」→「//」にするとどうなるか
- 2. 軽量プログラミング言語経験者のGoとの付き合い方
- 3. pgGeocoderとpg_featureservで、簡易ジオコーダAPIを試してみる
- 4. Golandの便利設定(随時更新中…)
- 5. M1macでGo言語の環境を整えた話
- 6. go testの裏側では何をしているのか?Goのtestingパッケージの中身を覗いてみよう!
- 7. 【Go】RDGLで簡単・劇的リアルな地形生成
- 8. Goの初期設定周りまとめ
- 9. Goのnet/httpはクエリーパラメータもx-www-form-urlencodedが透過的に扱える
- 10. go の乱数を見て気づいたこと
- 11. 作って学ぶ動画広告配信システム
- 12. [Go]ローカル環境でのテスト自動実行スクリプトにより開発体験を向上する
- 13. TwilioとGolangで理解してサクッと作る発着信Webアプリ
- 14. クリスマスなので Clean Architecture 用の自動コード生成ツールを作りたくなった話
- 15. goroutine で os.Chdir() する際に注意すべきポイント
- 16. Go: stripe API 使い方 (List all customers)
- 17. Go ファジング入門
- 18. GORMでSQLインジェクションされるコードを書いてしまったので公式ドキュメントcontributeした
- 19. GoサーバからFirestoreにアクセスするときに、セキュリティルールを有効にする
- 20. 【Go言語】静的解析である構造体のフィールドを参照している機能を調べたい
Goでgorilla/mux使用時、URIの「/」→「//」にするとどうなるか
## Goでサーバを立ち上げる
のは簡単です。
ルートに、URIと関数をセットで登録し、起動すればOKです。
パッケージは、`gorilla/mux`を使っています。
URIをいじった際のメソッド(`GET`、`POST`)を追いたいので、標準エラー出力とレスポンスにメソッドの中身を出力しています。
なぜ標準エラー出力かのツッコミは、一旦置いといてください。“`go
import (
“net/http”
“github.com/gorilla/mux”
)func main() {
r := mux.NewRouter()
r.HandleFunc(“/api/out”, out)
http.ListenAndServe(“:8080”, r)
}func out(w http.ResponseWriter, r *http.Request) {
method := r.Method
println(method)
w.Write([]byte(method))
}
“`## 正しいURIでアクセス
してみます。上記ソースを起動し、API Clie
軽量プログラミング言語経験者のGoとの付き合い方
# はじめに
[朝日新聞社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/asahi)の第20日目を担当する[M研](https://cl.asahi.com/)の松原です。
宜しくお願いします。普段はTypeScriptやPythonを触っており、Goを書き始めた当初は「あれもない」「これもない」という物足りなさに満ちていました。
3ヶ月くらいGoと向き合って考え方が変わってきたので、軽量プログラミング言語と比較したGoの特徴や、見てきたドキュメントについてまとめたいと思います。# 想定読者
– 一通りのチュートリアルは終えた人
– クラスベースのオブジェクト指向言語に触れたことがある人
– Go言語なんかしっくりこないな〜って人# 「Goに入ってはGoに従え」
– Goにないものは結構あるので、まずはそれをちゃんと理解する
– 物事にはトレードオフがつきもの、Goはシンプルさと変更の少なさに重きをおいている
– 「これがないのはイケてない!プンプン」と思うものもあるかもしれないが
pgGeocoderとpg_featureservで、簡易ジオコーダAPIを試してみる
# はじめに
先日(2021/12/04)の [FOSS4G Japan 2021 Online](https://www.osgeo.jp/events/foss4g-2021/foss4g-2021-japan-online/foss4g-japan-2021-online-core-day) イベントでは、「[pgGeocoderのご紹介](https://www.osgeo.jp/events/foss4g-2021/foss4g-2021-japan-online/foss4g-japan-2021-online-core-day#sponsor5)」というタイトルで発表させて頂きました。
_FOSS4G Japan 2021 Online – pgGeocoderのご紹介_
Golandの便利設定(随時更新中…)
# go fmt
コード整形してくれるツール。
command + S で保存するといい感じにコードを整形してくれる。
> Preferences > Tools > File Watchers で設定# Add a leading space to comments
ショートカットでコメントアウトした時に自動でスペースをしてくれる設定。“`
// コメント
↑ここのスペース
“`
> Preferences > Editor > Code Style > Go > Other# Comming soon…
M1macでGo言語の環境を整えた話
#1.はじめに
MacBook Air(M1,2020)において、Goの学習を始めるために環境を整えようと思います。ちなみにちゃんとした記事は今日が初めてですのでどうか温かい目で見てやってください。お願いします:baby_tone1:
#2.手順1
以下のサイトでダウンロード
https://go.dev/doc/install
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1514897/903ddd4c-2d2e-a729-96c3-6ad8c0dd2d7e.png)
そして特にこだわりがない場合はそのまま続けるを押下。(あれ、キャラクターこんな色だっけ)
#3.手順3
確認
ターミナルを開き
“`go version
“`
と押して、バージョンが出れば完了です!
#4.参考
https://techbowl.co.jp/techtrain/mypage/railway/5/quest/73テックトレインをやる上でせっかくなら記事を書き始めようと思いました。
go testの裏側では何をしているのか?Goのtestingパッケージの中身を覗いてみよう!
## :qiitan:はじめに
Goのユニットテストはとても簡単に書くことができ、指定された書式に沿ってコードを書けばテストができます。“`go
func TestSample_Sample(t *testing.T) {
if got := Sample(); got != “ok” {
t.Errorf(“Sample() = %v, want %v”, got, “ok”)
}
}
“`
筆者は業務・プライベートでテストを書いているうちに、– 「Goのテストって簡単に書けるけど、裏側ではどのように処理されているんだろう?」
– 「いつもテスト関数に渡している`*testing.T`ってなんだろう?」ということが気になりました。
実際の処理は内部に隠されており、調べても「Goのテストの書き方」の情報は見つかるのですが、内部構造の解説をしている情報にはたどり着くことができませんでした。
**「じゃあ実際にtestingパッケージをコードリーディングしてみよう!」**と思い立って、調べたことをまとめた内容が本記事になります。コードは公開されているた
【Go】RDGLで簡単・劇的リアルな地形生成
この記事は、自作ライブラリ**RDGL**の紹介目的で執筆したものです。
まだプレリリース状態なので、使用に際して不具合が発生する場合があります。
また、予告のない仕様変更が行われる可能性もあります。ご了承ください。
コントリビューション大歓迎です(詳しくは記事後半)。# RDGLとは?
**R**ealistic Procedural **D**EM **G**eneration **L**ibrary → **RDGL**
Go製の地形自動生成ライブラリです。
https://github.com/TadaTeruki/RDGL
今までの地形生成になかった特徴として、RDGLの生成する地形は
– 平地
– 渓谷
– 大陸棚
– リアス式海岸…といった、実在する地形の要素に基づいたものとなっています。
こんな感じ↓
!
Goの初期設定周りまとめ
## 概要
Go入門したので備忘録として、やったことや、理解したことをまとめる。実行時のバージョンは go1.17.2
## Goインストール
ここからインストール
https://go.dev/doc/install## $GOPATHを設定、/go/bin にPATHを通す
goプログラム内で`import`宣言が使われている場合、デフォルトで`$GOPATH/bin`を探しに行く仕様のため設定する必要がある。
`$GOPATH/bin`にはコンパイル後に生成される実行ファイル(バイナリファイル)が配置される。“`sh
# ~/.zshrcexport GOPATH=”$HOME/go”
export PATH=$PATH:$GOPATH/bin
“`
※任意のディレクトリを設定したい場合は`$GOBIN`で指定でき、これが指定されていない場合に上記の`$GOPATH/bin`が`import`宣言の探索先になる。## パッケージインストール
“`sh
# 最新版インストール
$ go get package_path# バージョン指定してインストー
Goのnet/httpはクエリーパラメータもx-www-form-urlencodedが透過的に扱える
[Goアドベントカレンダー](https://qiita.com/advent-calendar/2021/go)の欠番があったので穴埋めで書きました。
ちょっとウェブアプリケーション開発をがんばった経験がかなりある人であったり、Real World HTTPの熱心な読者であったり、Real World HTTPの熱心な読者の人であれば、フロントエンドからサーバーにデータを送信する手段が何種類もあることはご存知でしょう。
* クエリー(URL)
* ヘッダーフィールド
* ボディ本ではステータスコードも入れて4兄弟のように説明していたけど、サーバー→クライアント方向なのでここでは触れないでおきます。このうちヘッダーはメタデータなのでここで扱うのは2つですが、ボディを使うのは主にフォームのポスト(x-www-form-urlencodedとmultipart/form-data)と最近はJSONですね。
* クエリー(URL)
* ボディ
* x-www-form-urlencoded
* multipart/form-data
* JSONGoのAPIはJSO
go の乱数を見て気づいたこと
# これは何?
go の乱数の実装を見て気づいたことを書く。
扱うのは、数値シミュレーションとかで使う方の乱数。
ハードウェア乱数の話も暗号用途の話もしない。# 気づいたこと
## 生成
seed が 64bit しかない。64bit では足りない場面を見たことがあるので、えー64bit しかないのー、みたいな気分。
## スキップしたい
複数のプロセスや goroutine で大量の乱数を発生させるとき、みんな同じ種で作っておいて、「n番目のプロセスは、`rng.Uint64` を $n×2^{128}$ 回呼んだ後と同じ状態にしてからスタート」みたいなことができると便利だと思うんだけど、そういう機能はない模様。残念。
## Source64
math/rand に `Source64` というインターフェイスがあるけど、これの使い方が難しい。
ソースを見ると。
“`go:go
rng := rand.New(s)
“`みたいにするとき、`s` は math/rand の `Source` である必要があるわけだけど、 `s` が `Source64`
作って学ぶ動画広告配信システム
この記事は[CyberAgent PTA Advent Calendar 2021](https://adventar.org/calendars/6450)の18日目の記事です。
## はじめに
今年8月にABEMAにjoinし、広告配信システムの開発に携わらせてもらっています。
ABEMAはの広告配信システムは、[パーソナライズド配信](https://ad.abematv.co.jp/news/906/)や[プログラムマッチ](https://ad.abematv.co.jp/news/1007/)など、多機能で柔軟な広告配信を実現しており、システム自体の規模も巨大です。
一方で、個人的に動画広告の配信については全く知識がなかったため、joinした当初は、全体像を掴むのにかなり苦しみました。そこで、今回は動画広告配信システムのエッセンスだけ切り取り、実装してみることで、システムの全体像を掴むことを目標とします。
今後、動画広告配信に入門する人が全体像を掴むのに役立つ記事になればと思います。#### おことわり
– 本記事の全コードはこちら: https://git
[Go]ローカル環境でのテスト自動実行スクリプトにより開発体験を向上する
この記事は [DENSO アドベントカレンダー 2021](https://qiita.com/advent-calendar/2021/denso) の 18 日目の記事です。
Go で実装する際に使用している便利スクリプトを紹介します。
ファイルの編集保存の度にテストを自動実行し、色付けしたテスト結果を出力します。テストコマンド入力の煩わしさがなく、表示色で結果を判断できログを読む認知負荷が軽減します。コード編集に集中できるため、リファクタリング作業で重宝しています。# 動作デモ
デモではアサーションの期待する結果を編集して保存しています。ターミナルでスクリプトを一度実行した後は、エディタ内に留まったまま随時テスト結果を確認できます。
![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928808/fa808451-bded-f49a-63eb-8480c5f3a948.gif)# 準備
[reflex](https://github.com/cespare/refl
TwilioとGolangで理解してサクッと作る発着信Webアプリ
## はじめに
この記事は[Twilio Advent Calendar 2021](https://qiita.com/advent-calendar/2021/twilio)の18日目の記事です
https://qiita.com/advent-calendar/2021/twilio
みなさんTwilioを使っていますか?
Twilioは電話やSMSなどコミュニケーションに関するクラウドAPIを提供するSaaSで、プログラマティックに発着信・自動応答メッセージなどを扱うことができます
https://cloudapi.kddi-web.com/availability
Twilioは機能だけでなくドキュメントが充実している一方、豊富すぎて全体像が掴めず、当初自分はどこから手をつけてよいかわかりませんでした
またサーバーサイドの言語としてGolangを普段使用しているのですが、Twilioでは正式にサポートされていないので、チュートリアルや公式のSDKが存在しないので困った覚えがあります
そこで、そんな人達に向けてTwilioとサーバー連携の流れを理解しつつ、発着信
クリスマスなので Clean Architecture 用の自動コード生成ツールを作りたくなった話
# :christmas_tree: はじめに
この記事は [限界開発鯖 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/approvers)の18日目の記事です。前回(17日目)は[merunno](https://qiita.com/merunno)さんの「[Discord APIに今後来る変更](https://qiita.com/merunno/items/605317e13d2ba111f36d)」でした。
次回(19日目)は[kosakae256](https://qiita.com/kosakae256)さんの「[MLP-mixerが美味しい季節になってきました](https://qiita.com/kosakae256/items/763751e48c56ef468452)」です。# :raised_hands: 自己紹介
「ぬーべすと」と申します。Go言語を推してるただのオタクです。
好きなことは設計、嫌いなことは実装です。
設計だけしたら、誰かが勝手に実装してくれないかなと常に願ってい
goroutine で os.Chdir() する際に注意すべきポイント
この記事は [Go Advent Calendar 2021](https://qiita.com/advent-calendar/2021/go) 18 日目の記事です。
題のような記事を日本語のウェブサイト/ブログで紹介されているのを目にしないため、題のテーマを選びました。
## 環境のバージョン
* Windows10
* go version go1.17.5 windows/amd64## goroutine で os.Chdir() を行うとこのようなことがおこる
まずは、実際に `goroutine` で `os.Chdir()` を実施するとどのような動きになるかを見てみましょう。
以下のようなサンプルプログラムを動かしてみます。“`main.go
package mainimport (
“fmt”
“os”
“path/filepath”
“sync”
“time”
)var wg sync.WaitGroup
func main() {
baseDir, _ := os.Getwd()
wg.Add(3)
for
Go: stripe API 使い方 (List all customers)
こちらのページの続きです。
[stripe API 使い方 (List all customers)](https://qiita.com/ekzemplaro/items/ed152ef41f1e81811519)#Go http でカスタマーの一覧を取得#
必要なライブラリーのインストール
“`bash
go get github.com/joho/godotenv
“`“`bash
go mod init get_customers_http
go mod tidy
“`“`go:get_customers_http.go
// —————————————————————
// get_customers_http.go
//
// Dec/17/2021
// —————————————————————package main
import (
“os”
“fmt”
Go ファジング入門
[QualiArts Advent Calendar 2021](https://qiita.com/advent-calendar/2021/qualiarts)、17日目担当のs9iです。
昨年も17日目を担当し、[Goのリフレクション](https://qiita.com/s9i/items/b835634d84bba5574d0a)について書きました。
今回はGo1.18で導入されるファジングについて、基本的な使い方や使用イメージを掴んでいただけるように書いていきたいと思います。# ファジングとは
ファジングは、プログラムへの入力を継続的に操作して、バグや脆弱性を見つけるソフトウェアテスト手法の一つです。セミランダムな入力を与えることで、予期しないエッジケースの不具合を見つけるのに有効な手段となります。GoではGo1.18で標準機能として提供される予定です。([2021/9/21にmasterブランチにマージされました](https://github.com/golang/go/commit/6e81f78c0f1653ea140e6c8d008700ddad1fa0a
GORMでSQLインジェクションされるコードを書いてしまったので公式ドキュメントcontributeした
どうも、社会人歴2年目のオチラルです。
初ブログ記事です。
この記事は、[フューチャー Advent Calendar 2021](https://qiita.com/advent-calendar/2021/future)の17日目の記事で、昨日は@hichikaさんの[Goで多段のファイル変換処理をしてみた](https://qiita.com/hichika/items/25b0fceea4761214b6e9)でした。##はじめに
タイトルの通り、GORMでSQLインジェクションが起こりうるコードを書いてしまいました。
幸いテスト期間中に発覚したので大事にはなりませんでしたが、原因究明中に公式ドキュメントがいけてないなと思ったので同じミスを他の人が侵さないように世のため人のため、~~OSSコントリビュート実績解除チャンスだとウキウキで、~~公式ドキュメントにコントリビュートした話をします。##GORMとは
[GORM](https://gorm.io/ja_JP/docs/index.html)は公式ドキュメントによると、“`text
デベロッパーフレンドリーを
GoサーバからFirestoreにアクセスするときに、セキュリティルールを有効にする
## TL;DR
サーバからFirestoreにアクセスするとき、ユーザのID Tokenを渡すことで、Firestoreのセキュリティルールにできる。
## やりたいこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196890/4409237e-7a21-bf28-dd1e-6dc907275087.png)
奇妙な構成だが、仕事の事情でこういう風にしたい。
問題は、APIサーバからFirestoreにアクセスするとき、Firestoreのセキュリティルールが適用されないこと。APIサーバではFirebaseのadmin SDKを使うが、通常の使い方だと、サービスアカウントとしてFirestoreにアクセスすることになるため。
Firestoreのセキュリティルールに相当する認証や認可処理を自分で実装しないといけない。実装自体はそれほど手間でないのだが、Firestore側で認証/認可をするのに比べて、処理時間が結構かかる。
だから、APIサーバからFirestore
【Go言語】静的解析である構造体のフィールドを参照している機能を調べたい
# 前置き
ある日顧客から、こんな依頼を受けました。
**「あるDBテーブルのカラムがそれぞれどの機能で参照されているか調べて欲しい」**
OR Mapper的な仕組みを利用している為、カラムは全てある構造体のフィールドとして定義されています。
参照されているコードの個所を調べるだけならばgrepでもある程度可能そうですが、grepには下記問題があります。– 同名の変数や他構造体の同名フィールドもhitしてしまう
– 参照されている箇所しか分からず、その処理(関数)を呼び出している関数を辿れないエディタやIDEの機能を使い変数参照元と関数呼び出し元を辿ることも出来そうですが、何しろ対象の構造体は **フィールド数が数百個ある** 為、手作業でやっていたら相当時間がかかりそうです(´・ω・`)
そこで、静的解析プログラムを作成して、構造体フィールドとそれを呼び出している機能(関数)を自動で出力することを思い立ちました。
# 解析対象プロジェクト(サンプル)
## パッケージ構成
“`
sample/
| api/
| | api.go
| domain/
| |