- 1. Golangで、デザインパターン「Singleton」を学ぶ
- 2. Golangで、デザインパターン「Prototype」を学ぶ
- 3. Golangで、デザインパターン「Factory Method」を学ぶ
- 4. 勉強会情報をpush通知するslackアプリを作った
- 5. ループ中にある無名関数のgoroutineではキャプチャに気をつける
- 6. 実用HeadlessCMSになりそうな『Jolojo』の紹介と、『SveltElm』な開発スタイル。
- 7. PHP で Go の defer っぽいものを実装する
- 8. Go言語でソートのベンチマークを計測してみた
- 9. 趣味グラマーが5日で5個GitHubリポジトリを作ってみた
- 10. Next.js(React)でのCORSエラー解決(Next.js + Golang)
- 11. Go言語でnull値を含むParquetファイルを生成する
- 12. Golang入門.1 -http.HandleでHello World!-
- 13. Golangで、デザインパターン「Builder」を学ぶ
- 14. パケットフィルタの仕組みを理解しつつGoで特定のプロトコルパケットを取得(フィルタ)する
- 15. goenvのコマンドチートシート
- 16. docker-compose upでMySQLが起動するまで待つ方法(2種類紹介)
- 17. Progate無料版をやってみる【Go】
- 18. 忙しい人のためのGo入門
- 19. 兵庫県のCOVID19感染者状況のGraphQL APIを公開してみた。(その2)
- 20. Goのreturn記録
Golangで、デザインパターン「Singleton」を学ぶ
GoFのデザインパターンを学習する素材として、書籍「[増補改訂版Java言語で学ぶデザインパターン入門](https://www.hyuki.com/dp/)」が参考になるみたいですね。
取り上げられている実例は、JAVAベースのため、Pythonで同等のプラクティスに挑んだことがありました。
[Qiita記事: “Pythonで、デザインパターン「Singleton」を学ぶ”](https://qiita.com/ttsubo/items/c4af71ceba15b5b213f8)今回は、Pythonで実装した”Singleton”のサンプルアプリをGolangで実装し直してみました。
# ■ Singleton(シングルトン)
Singletonパターン(シングルトン・パターン)とは、オブジェクト指向のコンピュータプログラムにおける、デザインパターンの1つである。GoF (Gang of Four; 4人のギャングたち) によって定義された。Singleton パターンとは、そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンのことである。ロケールやル
Golangで、デザインパターン「Prototype」を学ぶ
GoFのデザインパターンを学習する素材として、書籍「[増補改訂版Java言語で学ぶデザインパターン入門](https://www.hyuki.com/dp/)」が参考になるみたいですね。
取り上げられている実例は、JAVAベースのため、Pythonで同等のプラクティスに挑んだことがありました。
[Qiita記事: “Pythonで、デザインパターン「Prototype」を学ぶ”](https://qiita.com/ttsubo/items/07b91a14fcf4c26d7515)今回は、Pythonで実装した”Prototype”のサンプルアプリをGolangで実装し直してみました。
# ■ Prototype(プロトタイプ・パターン)
Prototypeパターン(プロトタイプ・パターン)とは、ソフトウェア開発で用いられる、生成に関するデザインパターンの1つである。生成されるオブジェクトの種別がプロトタイプ(典型)的なインスタンスであるときに使用され、このプロトタイプを複製して新しいオブジェクトを生成する。このパターンは、以下の目的で用いられる。
– Abstract
Golangで、デザインパターン「Factory Method」を学ぶ
GoFのデザインパターンを学習する素材として、書籍「[増補改訂版Java言語で学ぶデザインパターン入門](https://www.hyuki.com/dp/)」が参考になるみたいですね。
取り上げられている実例は、JAVAベースのため、Pythonで同等のプラクティスに挑んだことがありました。
[Qiita記事: “Pythonで、デザインパターン「Factory Method」を学ぶ”](https://qiita.com/ttsubo/items/623f32f9e96cb16d04a4)今回は、Pythonで実装した” Factory Method”のサンプルアプリをGolangで実装し直してみました。
# ■ Factory Method(ファクトリメソッド)
Factory Method パターン(ファクトリメソッド・パターン)とは、GoF (Gang of Four; 四人組)によって定義されたデザインパターンの1つである。 Factory Method パターンは、他のクラスのコンストラクタをサブクラスで上書き可能な自分のメソッドに置き換えることで、 アプリケーショ
勉強会情報をpush通知するslackアプリを作った
# はじめに
勉強会の情報を定期的にpush通知してくれるslackアプリを作った。こんな感じでpush通知したい勉強会の条件を設定して、
![study.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131625/a292bae9-c3dc-6519-f411-f9489bd40b36.gif)
条件に合致した勉強会が、設定した時刻に定期的に通知される。
# モチベーション
大きめの勉強会や人気の勉強会の開催を、qiitaのトレンド記事やはてブの記事に挙げられてるのを見て、後から知ることが結構ある。そういう人気の勉強会をpush通知してくれるような仕組
ループ中にある無名関数のgoroutineではキャプチャに気をつける
# ループ中のgoroutineでは束縛に気をつける
ほかのプログラミング言語の非同期処理でもよく起こしてしまう問題が、レキシカルスコープとダイナミックスコープの理解不足によるキャプチャのミスだ。
今回は、 **goroutine でやりがちなコードでキャプチャのミスを `go vet` で機械的に見つける方法を紹介する**
## 例題
goroutine を使って1,2,3とプリントする関数を3並列で処理したいとする[^1]。以下のコードを書いてみた。どういう動作をするだろうか?[^1] 今回はプリントする関数としたが、実用であれば重い処理を実行する関数になるはず。
“`go
package main
import (
“fmt”
“sync”
)func main() {
integers := make([]int, 3)
for i := range integers {
integers[i] = i
}wg := &sync.WaitGroup{}
for _, v := range integers {
wg.Add(1)
実用HeadlessCMSになりそうな『Jolojo』の紹介と、『SveltElm』な開発スタイル。
# 三行で
– Svelteを使えるHeadlessCMSのJolojoがもうすぐオープンソースになるってよ。
– JolojoのAPIはGoで記述する模様。Svelteでなくても呼び出せるよ。
– JolojoのクライアントサイドをElm+Svelteとすることで硬め・大規模なCMS開発にも使えそう(=>個人の感想)。…後半、話が広がっていっちゃうのだけれど、Fringe81さんのAdvent Calendar 2018の記事『[組織の新言語導入(JS→TypeScript→Elm)で成したかった組織づくりの話](https://qiita.com/hosomichi/items/6c107f32d70bdb47fa35)』を読んでおいてもらえると話がつながるかな、と。
# 背景
[JavaScript ベスト・オブ・ザ・イヤー 2019『フロントエンド フレームワーク』](https://qiita.com/rana_kualu/items/4727a0d64657aa837ce3#%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A
PHP で Go の defer っぽいものを実装する
# はじめに
Go には defer という return などの前に共通で呼び出してくれる機能があります。“`go
package mainimport (
“fmt”
)func main() {
defer func() {
fmt.Printf(“Hello World 1\n”)
}()
fmt.Printf(“Hello World 2\n”)
}
“`上記の結果は
“`
Hello World 2
Hello World 1
“`です。この記事は、これを PHP でやる手段はあるかどうかについて書きます。
# Q. PHP で defer はできるのか?
A. できます。“`php
try {
echo “Hello World2\n”;
} finally {
echo “Hello World1\n”;
}
“`または
“`php
class A
{
public function __destruct()
{
echo “Hello World!\n”;
Go言語でソートのベンチマークを計測してみた
# はじめに
今回使用するソートアルゴリズムは「バブルソート」「選択ソート」「挿入ソート」「シェルソート」です。ソートアルゴリズムによってどれくらいの差がでるのかベンチマークを計測したら、面白かったので各ソートアルゴリズムの特徴と合わせて紹介したいと思います。
※ 今回使用していない「クイックソート」「マージソート」についてもいつか追記できたらと思います。## ベンチマークの計測について
ベンチマークの計測は go の標準パッケージの testing を使用します。
100,000 個のランダムな数値を持つスライスを生成し、各ソートアルゴリズムで生成されたスライスのソートが完了するまでの時間を計測します。– 計測に使うPCのスペック
“`
機種: MacBook Pro
プロセッサ名: Dual-Core Intel Core i5
プロセッサ速度: 2.3 GHz
メモリ: 16 GB
“`– ベンチマーク計測に使用するコード
“`golang
// 1,000,000 以下の n 個のランダムなスライスを生成する
func GenerateS
趣味グラマーが5日で5個GitHubリポジトリを作ってみた
趣味グラマーですが、GitHub リポジトリを5個作ってみました。せっかく作ったので誰かしらに見てもらえたら嬉しいなということと、初心者が GitHub を始める敷居を下げられたらいいなという思いで Qiita 投稿してみます。
※ ちなみに普段は運用系のお仕事をしているので、一応 IT 系ではあります。
## GitHub のリポジトリってどうやって作ればいいんですか?
わかります、、、その疑問。でも大丈夫!そこは親切な GitHub さんなので、新しくブラウザからリポジトリを作ると以下みたいな画面を出してくれます。画面のとおりにコマンドを実行すると、作ったリポジトリに push(アップロード)してくれます。![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606756/904ba1f9-70ba-da7e-0b99-1954d163c856.png)
そもそも Git がよくわからない!という人は、ひとまず git init 等のコマンドを、プロダクトを作ったディレクトリ
Next.js(React)でのCORSエラー解決(Next.js + Golang)
# Next.jsでのCORSエラー解決(Next.js + Golang)
React + GoでSPAを作りたく、ReactフレームワークのNext.jsを使ってみた。
SPAの最初で躓きがちなCORSエラーについて、案の定ハマったのでメモ。(Angularでの開発の際もだいぶハマった思い出)## CORSエラーが出る
今回のようにフロントエンド、バックエンドでサーバを分けて開発する際に、そのままだとCORS(Cross-Origin Resource Sharing)についてのエラーが発生する。これはブラウザの機能として、クロスドメイン(ドメインの違うサーバへの)アクセスが制限されているため起きます。
例えば、フロント `http://localhost:3000` , バック `http://localhost:5000` とした時、フロントからバックのapiを叩こうとするとcorsエラーとなります。(ドメイン違うので)正常にapi叩くにはこれを解決する必要があります。
## Next.jsではカスタムサーバを利用し、プロキシする
Next.jsでカスタムサーバ
Go言語でnull値を含むParquetファイルを生成する
## 環境
* macOS Catalina
* Go 1.14
* parquet-go 1.5.1
* pyarrow 0.16.0(確認用)
* pandas 1.0.3(確認用)## Parquetファイルの生成
このソースコードを`main.go`として保存する。
“`go
package mainimport (
“log”“github.com/xitongsys/parquet-go-source/local”
“github.com/xitongsys/parquet-go/writer”
)type Example struct {
Col *string `parquet:”name=col, type=UTF8″`
}func main() {
fw, err := local.NewLocalFileWriter(“example.parquet”)
if err != nil {
log.Fatal(err)
}pw, err := writer.NewParquetWriter(fw, new(Examp
Golang入門.1 -http.HandleでHello World!-
## はじめに
他の言語でweb開発の経験がある人 (筆者) がgolangに入門する際に勉強したことを一連の記事でまとめていきます。## やること
記事においてはweb開発において必要な機能をはじめとした、ある程度実践的な範囲を対象とします。基本的には対象とする機能を実装したコードを記載します。またコードだけではなく、ドキュメントを踏まえた概念的な説明を挟んでいきます。## やらないこと
開発環境の構築方法や基本文法の説明は省略します。## 今回のテーマ
http.Handleを用いてHello World!を表示させるまでの流れを説明します。## 概念編
以下は[net/httpのdocument] (https://godoc.org/net/http)から抜粋しています。
golangでは他の言語と同様にHTTP requestに応じてresponseを生成します。ざっくりとした流れは以下の通りです (簡単のため、今回はURLにのみ注目します) 。
1. HTTP requestの中身を確認する
2. URLをparseし、事前に登録しておいたpatternと
Golangで、デザインパターン「Builder」を学ぶ
GoFのデザインパターンを学習する素材として、書籍「[増補改訂版Java言語で学ぶデザインパターン入門](https://www.hyuki.com/dp/)」が参考になるみたいですね。
取り上げられている実例は、JAVAベースのため、Pythonで同等のプラクティスに挑んだことがありました。
[Qiita記事: “Pythonで、デザインパターン「Builder」を学ぶ”](https://qiita.com/ttsubo/items/0860e31c392aa3b91ed5)今回は、Pythonで実装した” Builder”のサンプルアプリをGolangで実装し直してみました。
# ■ Builder(ビルダー)
Builderパターン(ビルダー・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。 オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする。
## UML class and sequence diagram
![W3sDesign_Builder_Design_P
パケットフィルタの仕組みを理解しつつGoで特定のプロトコルパケットを取得(フィルタ)する
## 理解しておくと良い前提知識
– カーネル空間/ユーザー空間の違い
– ネットワークの基礎
– ソケットプログラミングの基礎## 環境
“`bash
$ go version
go version go1.13.5 linux/amd64
“`## パケットフィルタの仕組み
特定のプロトコルパケットをフィルタする前にパケットフィルタの仕組みについて記す。
※cBPFとeBPFの違い、現在のBPFの機能がパケットフィルタだけではないとか、BPFの歴史/変遷などについてはこの記事では触れていませんのでご了承ください:bow:例としてtcpdumpでのパケットフィルタを用いる。
tcpdumpなどのパケットキャプチャツールはソフトウェアとしてユーザ空間で動作します。
また、tcpdumpでキャプチャされているデータはカーネル空間からコピーされたデータとなっており、直接アプリケーションなどがやり取りするパケットを覗いているわけではありません。(そんなことしてたらオーバーヘッドがやばい)
ユーザランドでフィルタをしていてはカーネル空間から実際にフィルタしたいプロトコルのパケッ
goenvのコマンドチートシート
pyenvと似たような感じですね。
### コマンドチートシート
| command | 内容 |
| —- | —- |
| goenv commands | 使用可能なgoenvコマンドを全て表示 |
| goenv completions | –completeを指定して呼び出すことにより、自身および他のコマンドの自動補完を提供します。 |
| goenv exec | 指定した仮想環境のGoバージョンでファイルを実行する。
例)goenv exec go run main.go |
| goenv global |すべてのシェルで使用されるGoのグローバルバージョンを設定する。 |
| goenv help | コマンドのヘルプを表示
例)goenv help execとか、goenc help installなど、helpのあとにコマンドを入力すると、当該コマンドのヘルプを表示してくれる。 |
| goenv hooks | 特定のgoenvコマンドのフックスクリプトを一覧表示する。 |
| goenv init | g
docker-compose upでMySQLが起動するまで待つ方法(2種類紹介)
##docker-compose upで立ち上がらないGoのコンテナがありまして
docker-compose up -dでコンテナを立ち上げる際、
なぜかWeb側のコンテナが立ち上がらないという現象が発生していました。docker-compose up -d!
“`
docker-compose up -d
Creating network “api_network” with the default driver
Creating redis … done
Creating mysql … done
Creating api … done
“`しかし調べてみると、、、
“`
docker-compose ps
Name Command State Ports
————————————————————————————————–
mysql .sh
Progate無料版をやってみる【Go】
[前回](https://prog-8.com/go/study/1/1#/1)に引き続きProgate無料レッスンをやっていこうと思います。
今回はGoです。
Googleが開発したプログラミング言語です。
#Go
[公式レッスン](https://prog-8.com/go/study/1/1#/0)###環境構築
[公式](https://golang.org/)からダウンロードIDEは最近使用しているVSCodeでいこうかなと・・・。
インストール後、[Getting Started](https://golang.org/doc/)を行います。
どうやら環境変数に「c:\Go\bin」(c:\Goにインストールした場合)を追加する必要があるようです。→ 確認したところ、すでに入ってました・・・。
VSCodeのGoプラグイン
https://code.visualstudio.com/docs/languages/go###Goに触れてみよう
・Progateを真似て、`main.go`を適当なディレクトリに作成し、VSCodeでディレクトリを開
忙しい人のためのGo入門
とりあえうz、Go始めてみようかなと思った人向け
# 忙しい人のためのGo入門
## そもそもGoとは
Goは,2009年にGoogleにより発表されたオープンソースのプログラミング言語です。## Goの特徴は
シンプルな言語仕様,型システム,並行処理## おすすめの講座
### progate Go講座
https://prog-8.com/languages/go### dotinstall Go入門
### サンプルアプリ
Goでアプリケーションを作る講座
https://rightcode.co.jp/blog/information-technology/golang-introduction-environment-1## 基本的な文法(公式ドキュメント)
http://golang.jp/category/%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88↓もわかりやすい
http://gihyo.jp/dev/feature/01/go_4beginners## ユニットテスト
兵庫県のCOVID19感染者状況のGraphQL APIを公開してみた。(その2)
# 宣伝
兵庫県のコロナウイルス特設サイトが公開中
https://stop-covid19-hyogo.org/
僕の公開しているGraphQL APIとは今のところ別働で動いていますが
かなり参考にさせて頂いておりますのでご紹介しておきます。# hyogo.covid19-api
[GraphQLプレイグラウンド](https://hyogo.covid19-api.ga/playground)**api内訳**
– [readInfectedPeoples](https://qiita.com/Inadati/items/24437af1435245eafa4f#readinfectedpeoples)
– [readExamOverviews](https://qiita.com/Inadati/items/24437af1435245eafa4f#readexamoverviews)
– [readExamDetails](https://qiita.com/Inadati/items/24437af1435245eafa4f#readexamdetails)
–
Goのreturn記録
Goのreturnについて学んだので、備忘録としてまとめます。
“`main.go
package mainimport “fmt”
func add(x, y int) (int, int) {
return x + y, x – y
}func main() {
r1, r2 := add(10, 20)
fmt.Println(r1, r2)}
“`