- 1. Ubuntuに最新バージョンのGo言語をインストールする
- 2. ESP32 向けに TinyGo をセットアップする
- 3. 地形生成アルゴリズム 開発NG集
- 4. PulumiのGoでAWS App Runnerを構築する
- 5. Goでgorilla/mux使用時、URIの「/」→「//」にするとどうなるか
- 6. 軽量プログラミング言語経験者のGoとの付き合い方
- 7. pgGeocoderとpg_featureservで、簡易ジオコーダAPIを試してみる
- 8. Golandの便利設定(随時更新中…)
- 9. M1macでGo言語の環境を整えた話
- 10. go testの裏側では何をしているのか?Goのtestingパッケージの中身を覗いてみよう!
- 11. 【Go】RDGLで簡単・劇的リアルな地形生成
- 12. Goの初期設定周りまとめ
- 13. Goのnet/httpはクエリーパラメータもx-www-form-urlencodedが透過的に扱える
- 14. go の乱数を見て気づいたこと
- 15. 作って学ぶ動画広告配信システム
- 16. [Go]ローカル環境でのテスト自動実行スクリプトにより開発体験を向上する
- 17. TwilioとGolangで理解してサクッと作る発着信Webアプリ
- 18. クリスマスなので Clean Architecture 用の自動コード生成ツールを作りたくなった話
- 19. goroutine で os.Chdir() する際に注意すべきポイント
- 20. Go: stripe API 使い方 (List all customers)
Ubuntuに最新バージョンのGo言語をインストールする
#はじめに
UbuntuにaptでGo言語をインストールしようとすると、少し古いバージョンがインストールされてしまうので、最新バージョンがインストールされるようにします。#環境
Ubuntu 20.04.3 LTS#Goをインストール
以下のコマンドを実行すると、Goのバージョンは1.13でAPTのソースはUbuntuのサイトをさしています。“`
$ apt info golang
Package: golang
Version: 2:1.13~1ubuntu2
Priority: optional
Section: devel
Source: golang-defaults
Origin: Ubuntu
Maintainer: Ubuntu Developers
Original-Maintainer: Go Compiler Team
Bugs: https://bugs.launchpad.net/ubuntu/
ESP32 向けに TinyGo をセットアップする
このページには、 ESP32 + TinyGo を使ってマイコンプログラミングを始めるための情報を記載します。
ESP32 を搭載したボードは多数ありますが、ボード固有の話よりもまずは ESP32 全般の環境を立ち上げます。
あと、試してないですが、 ESP8266 および ESP32-C もこのページに従って環境立ち上げできるはずです。## TinyGo とは
マイコンや WASM などの Small Places 向けの Go Compiler です。
ここでは Go の文法でマイコン開発ができるもの、という程度の認識でよいです。* [TinyGo – Go on Microcontrollers and WASM](https://tinygo.org/)
このページは 2021/11/18 にリリースされた TinyGo 0.21 を対象としています。
## ESP32 とは
WiFi + Bluetooth を内蔵するマイクロコントローラーです。
Tensilica の Xtensa LX6 マイクロプロセッサを採用し、デュアルコアとシングルコア版があります。
地形生成アルゴリズム 開発NG集
### まえがき (FUN関係者の方々に向けて)
このNG集は [FUN Advent Calendar 2021](https://adventar.org/calendars/6526) に投稿させていただく記事です。
公立はこだて未来大学(FUN)の先輩の方々には、入学前という立場にも関わらず様々な形でお世話になっています。。同級生もやさしい&面白い人ばかりで、改めてFUNを選んでよかった…と感銘を受けています。皆さんこれからもどうかよろしくお願いします。# 概要
自分は近頃、地形生成アルゴリズムの実装にハマっています。
先日にはこんなものをリリースしました↓https://github.com/TadaTeruki/RDGL
(よければ★スターしてね!)
使い方の解説などは[**この記事**](https://qiita.com/TadaTeruki/items/a78a8e463e4edfda1884)に載せているので、興味のある方ぜひ見てみてください
タイトルは若干誇張してますが、、ご愛嬌。### NG集??
この**RDGL**という代物ですが、
PulumiのGoでAWS App Runnerを構築する
## Pulumiってなに?
以前書いた記事の通り、インフラのプロビジョニングツールです。
https://qiita.com/runeleaf/items/0e2b69bae38164aa826a
今回はGoでAWSのApp Runner環境を構築してみます。
前回からだいぶ間が空いているのですが、変わったことといえばPulumi 3.0がリリースされたこと、AWSネイティブプロバイダーを発表したことでしょうか。
https://www.infoq.com/jp/news/2021/11/pulumi-aws-native-provider/
なにがどう変わったのか細かく見るのもアレなので今回はPulumiでApp Runnerの環境をつくりたいと思います。
ちなみにまだRubyには対応していない。
## 準備
macOS Big Sur
“`
$ sw_vers
ProductName: macOS
ProductVersion: 11.6
“`“`
$ pulumi version
v3.20.0
“`AWS環境変数設定
“`
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”