- 0.0.1. Goのnet/httpパッケージでHello WorldするだけのWebアプリ
- 0.0.2. 【Golang】mapのvalueに配列を指定する
- 0.0.3. テスト記事1
- 0.0.4. golang profiling
- 0.0.5. Cloud Pub/Subの「メッセージの順序指定」によりFIFOキューが実現できるのか?
- 0.0.6. goのgqlgenでgqlgenコマンドが効かない
- 0.0.7. 【続】tcpの仕様上、接続先がコネクションをcloseしているかはパケットを一度は実際に送るまでわからないよという話
- 0.0.8. Golangのflagパッケージの使い方(最小限の知識)
- 0.0.9. Golangのerrorとpanic
- 0.0.10. Qiita APIをgoから叩いてみた
- 0.0.11. golandとDocker設定
- 0.0.12. AtCoder Regular Contest 105のメモ
- 0.0.13. googleのsubcommandsでGCPのSecret Managerへの読み書きをラップ
- 0.0.14. [GoLand]コメントの先頭にスペースを設定する
- 0.0.15. [Go]「…(ピリオド3つ)」の使い方
- 0.0.16. QiitaのtagフィードをCLIで見るためのCLIツールをGo言語で書いた
- 0.0.17. AtCoder HHKB プログラミングコンテスト 2020 参戦記
- 0.0.18. HHKB プログラミングコンテスト 2020のメモ
- 0.0.19. DockerでのRailsアプリケーション構築
- 0.0.20. 絶対に転職すると心に誓ったのでgolangで”hello word” してみた
- 1. とりあえず準備
- 2. コードを書いていこう
Goのnet/httpパッケージでHello WorldするだけのWebアプリ
# Goの目覚め
低レイヤーの知識を身につけて、さいつよ自給自足エンジニアになるぞ!
…と意気込みC言語を学んでみたものの面白さが見出せなかった自身へ送る。## ペルソナ
Webアプリを作りたいなら、現状NodeやRailsで十分と思ってる。
デスクトップアプリなら、Electronで。
ターミナルアプリとか、OSの機能を使うぜ系でGoとか使ってみたいなぁと思ってる方 (最近流行りのDockerやGitHub CLIもGo製だし、使えれば遊べそう)。## 本記事の目的
Goを学ぼうかどうか判断するために、簡単なWebアプリを作ってみます (アクセスしたら、Hello Worldと表示するだけ)。# 開発環境
Goを信用して良いのか分からなかったので、環境を汚さないために、Dockerでやります。
面白かったら、デバッカーとかで内部まで見たいので、ローカルで環境構築します。ディレクトリ構成は以下のようにしました。
compileFileディレクトリ内にgoファイルを置いて、ビルドしていきます。“`
compileFile (ディレクトリ)
Dockerfil
【Golang】mapのvalueに配列を指定する
## 概要
mapの中にvalueに配列をいれるみたいなのをGoでしたかったので自分用メモ
## 実装
“`go
package mainimport “fmt”
type Hoge struct {
Say string
}func main() {
a := map[string][]Hoge{}
a[“hoge”] = append(a[“hoge”], Hoge{Say: “hello1”})
a[“hoge”] = append(a[“hoge”], Hoge{Say: “hello2”})
a[“hoge1”] = append(a[“hoge1”], Hoge{Say: “hello3”})
fmt.Println(a)
}
“`上記をgo runすると
“`
map[hoge:[{hello1} {hello2}] hoge1:[{hello3}]]
“`のようにmapのvalueの中にarrayが入ります
テスト記事1
test1
golang profiling
参考資料をメモするだけ
—-
– https://github.com/adjust/go-wrk
– https://golang.org/pkg/net/http/pprof/
– https://github.com/uber-archive/go-torch (すでにGo1.11から含まれてる)# Video
– GopherCon 2019: Dave Cheney – Two Go Programs, Three Different Profiling Techniques https://youtu.be/nok0aYiGiYA
– Profiling and Optimizing Go(古いけど) https://youtu.be/N3PWzBeLX2M
Cloud Pub/Subの「メッセージの順序指定」によりFIFOキューが実現できるのか?
# お題
[Cloud Pub/Sub](https://cloud.google.com/pubsub?hl=ja)使ってますか?
大量のメッセージを捌きたい時に使いますね。
これ、メッセージ投入時の順序、保証したい時、ないですか?
AWSの場合であればSQSの[FIFOキュー](https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html)を使うのかなと思います。
(過去に使おうとしたことがあったものの、まだ東京リージョンなかったのと1秒に最大3000メッセージという制約に尻込みして、結局使わなかった記憶が。。。)
SQSに相当するといったらGCPではCloud Pub/Subだと思いますが、残念ながらFIFOキューは無い。
と思っていたら、
(Beta版ですが)「[メッセージの順序指定](https://cloud.google.com/pubsub/docs/ordering?hl=ja)」という機能が出来ていたようで。
これで、メッセージがPu
goのgqlgenでgqlgenコマンドが効かない
# 事象
– goでGraphQLを実装するのにgqlgenを使っていた
– https://github.com/99designs/gqlgen
– READMEに書いてあるコマンド `go run github.com/99designs/gqlgen [args]`が実行できたり、できなかったりした# 発生条件
– go.modファイルに書いてあるgoのバージョンが1.12以下の人はおそらくREADME通りにやっても動作する
– go.modファイルに書いてあるgoのバージョンが1.13以上の人は`go mod vendor`後に実行するとおそらくエラーになる# 対処方法
– `go get github.com/99designs/gqlgen`した段階でおそらく`$GOPATH/bin/gqlgen`が生成されているはず
– `gqlgen [args]`で実行できる。(`$GOPATH/bin`にパスが通っているはず)# 最後に
– go run [package]は、実行する場所($GOPATH内かそうではないか)、go.modのバージョン、./vendo
【続】tcpの仕様上、接続先がコネクションをcloseしているかはパケットを一度は実際に送るまでわからないよという話
# はじめに
以前、[tcpの仕様上、接続先がコネクションをcloseしているかはパケットを一度は実際に送るまでわからないよという話](https://qiita.com/behiron/items/3719430e12cb770980f3)という記事をかいたのですが、そのきっかけは> 以前、アプリからDBにSQLを投げたところ、コネクションがinvalidだというエラーが起きました。この原因自体はとても簡単でサーバ側(DB側)のコネクションを保持するタイムアウト設定がクライアントよりも短かったというだけなのですが、「これってクライアントライブラリ側でソケットにwriteした時点でエラーになるんだからハンドリングしてコネクションプールに保持している他のコネクションをよしなに使ってよ!!」と思ったのでした。
でした。
これは[goのmysqlドライバー](https://github.com/go-sql-driver/mysql)を利用した場合に発生していたのですが、まさにこの問題をGitHubの中の人が去年に修正しており、それをテーマに[ブログ](https://github
Golangのflagパッケージの使い方(最小限の知識)
flagパッケージはコマンドラインのフラグを解析するのに便利なパッケージです。
## flagパッケージをインポートする
“`go
import “flag”
“`## フラグの値を格納する変数を定義する
### 関数外で定義する場合の書き方
“`go
var boolFlag bool
var intFlag int
var strFlag string
“`### 関数内で定義する書き方
“`go
boolPtr := flag.Bool(“b”, false, “真偽値の値の例”)
intPtr := flag.Int(“i”, 0, “数値の場合の例”)
strPtr := flag.String(“s”, “”, “文字列の場合の例”)
“`## フラグの初期化
init() はmain()が呼ばれる前に実行される。
main内に記述したflag.Parse()によって変数に指定されたフラグの値が入るが、initの時点ではまだ変数には値が入っていない状態。
そのためここではフラグの値を格納するためのポインタを予約するだけの挙動となる。
Golangのerrorとpanic
#### The art of programing
業務ロジックにエラーブロックが沢山の場合がよく見られる
例えば以下の関数を順次に呼ぶ“` go
func first() error {return nil}
func second() error {return nil}
func third() error {return nil}
func fourth() error {return nil}
func fifth() error {return nil}
“`**error**を判断する書き方は、
なに?眩暈しちゃった。。。“` go
func Do() error {
var err error
if err = first(); err == nil {
if err = second(); err == nil {
if err = third(); err == nil {
if err = fourth(); err == nil {
Qiita APIをgoから叩いてみた
## はじめに
Go言語を勉強しなければという使命感にかられ、遊んでみることにしました。## golang + Qiita API
### 環境
・ go version go1.13 darwin/amd64### URIと機能
|Path |HTTPメソッド |機能 |
|—|—|—|
|/qiita/api/v1/user-info | GET |指定されたユーザの記事一覧を、作成日時の降順で返します。 |### 使用パッケージ
**・ gin**
ginは、go製のWebフレームワークです。jsonレスポンス処理機能も持っている優れものです。“`
go get github.com/gin-gonic/gin
“`### ファイル構成
“`
❯ tree .
.
├── main.go
└── src
└── controller
└── controller.go2 directories, 2 files
“`### controller
mainから呼び出すタスク処理をまとめています。`
golandとDocker設定
# golandを使う人への参考記事まとめです。
## GolandでDockerを使う
[Docker – 公式ヘルプ | GoLand](https://pleiades.io/help/go/docker.html#using-docker-compose)
公式ページ。これだけでもいい人もいるはず。日本語が少し不自然。[GolandでDocker上のサーバーをRemote Debug – Qiita](https://qiita.com/edelweiss452/items/2013b6f34be8ab6d4abd)
リモートデバッグの解説が日本語で書かれていて読みやすい。[Docker上のGo製Webアプリケーションをリモートデバッグする – Qiita](https://qiita.com/keitakn/items/f46347f871083356149b#docker-compose%E3%81%AE%E8%A8%AD%E5%AE%9A)
実際に使用しているコードがわかります。## golandの設定
[GoglandでオススメのGo快適開発環境構築方法
AtCoder Regular Contest 105のメモ
# 前置き
Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。# 問題
https://atcoder.jp/contests/arc105
# A
“`Q_A.go
package mainimport (
“fmt”
)func main() {
var a,b,c,d int
fmt.Scanf(“%d %d %d %d”, &a, &b, &c, &d)flag := false
flag = (a == b+c+d || a+b == c+d || a+c == b+d || a+d == b+c || a+b+c == d || a+b+d == c || a+c+d == b )
var s string
if flag == true{
s = “Yes”
}else{
s = “No”
}
fmt.Printf(“%s\n”, s)
}
“`# B
“`Q_B.go
package
googleのsubcommandsでGCPのSecret Managerへの読み書きをラップ
# お題
GCPには[Secret Manager](https://cloud.google.com/secret-manager?hl=ja)というのがある。
Kubernetes知ってる人は「[Secrets](https://kubernetes.io/ja/docs/concepts/configuration/secret/)みたいなものか」思うかも。ただk8sのSecretsはBase64エンコードなので、(例えば元データの管理の名目としても)PublicなGitHubリポジトリにアップするわけにいかないけど、Secret Managerの方は暗号化されてるので(鍵を知らなければ)まさにSecret。その他、ウリみたいなものについては以下参照。
https://cloud.google.com/blog/ja/products/identity-security/introducing-google-clouds-secret-manager上記参考記事にも記載してあるけど、Secret Managerに限らずGCPのサービス群は[Cloud SDK](https
[GoLand]コメントの先頭にスペースを設定する
# 1.はじめに
ググっても解決策(GoLandの公式ヘルプ)がなかなかヒットしなかったので書きました。
個人的にはGoLandを別のPCにインストールしたときという、たまにの機会に忘れていて結構困るためです。## 1-1.この記事を読んだらどうなるのか
フォーマット時にコメントの先頭にスペースが自動的に入るようになって、楽になれる。## 1-2.対象読者
GoLandでコメントの先頭にスペースを自動でいれられずに苦しんでいる人。# 2.GoLandの設定
[こちら](https://pleiades.io/help/go/reformat-and-rearrange-code.html#configure-leading-spaces-in-comments)が公式のヘルプ
公式を引用させてもらいます。> 1.設定ウィンドウ(ファイル | 設定)を開きます。
> 2.エディター | コード・スタイル | Goをクリックします。
> 3.その他タブをクリックします。
> 4.コメントに先行スペースを追加するチェックボックスを選択します。
> 5.コメントのスペースを除
[Go]「…(ピリオド3つ)」の使い方
# 1.はじめに
これからGoを始める人のためになればと思って記事を書きました。
ソースコードで「…」を初めて見たときに、ググっても日本語で情報がまとまっているものがあまり無いので、私が業務でよく使っている「…」の使い方をまとめようとおもいました。## 1-1.この記事を読んだらどうなるのか
「…」の使い方とポイントを理解できる## 1-2.対象読者
Goの「…」がわからない人# 2.「…」の使い方
## 2-1.関数のパラメータを可変長にしたいとき
関数のパラメータを可変長にすることができます。
たとえば、関数で複数のintを可変で受け取りたいときがあるとしたら、以下のように書くことができます。
ポイントは **…int** のように型の前に…を書くことです。“`
// WriteInt はintを可変で受け取って出力する関数
func WriteInt(nums …int) {
for _, v := range nums {
fmt.Println(v)
}
}
“`実行すると、以下の結果になります
“`
f
QiitaのtagフィードをCLIで見るためのCLIツールをGo言語で書いた
[Zennのこちらの記事(フィードを取得する Go 言語パッケージ)](https://zenn.dev/spiegel/articles/20201003-feed-with-golang) を読んで、[gofeed](https://github.com/mmcdole/gofeed)という便利なツールがあることを知り、触ってみたくなったので、QiitaのtagフィードをCLI上で表示するだけの、シンプルなツールを作ってみました。
[qiita-tag-feed-reader-cli – CLI reader of Qiita tag feed.](https://github.com/shinshin86/qiita-tag-feed-reader-cli)
## qiita-tag-feed-reader-cliの使い方
上のリンク先にある[README](https://github.com/shinshin86/qiita-tag-feed-reader-cli/blob/main/README.md)のままの説明になりますが、下記のとおりです。“`bash
#
AtCoder HHKB プログラミングコンテスト 2020 参戦記
# AtCoder HHKB プログラミングコンテスト 2020 参戦記
## [HHKB2020A – Keyboard](https://atcoder.jp/contests/hhkb2020/tasks/hhkb2020_a)
2分で突破. 書くだけ.
“`python
S = input()
T = input()if S == ‘Y’:
print(T.upper())
elif S == ‘N’:
print(T)
“`## [HHKB2020B – Futon](https://atcoder.jp/contests/hhkb2020/tasks/hhkb2020_b)
3分で突破. 書くだけ.
“`python
H, W = map(int, input().split())
S = [input() for _ in range(H)]result = 0
for h in range(H):
for w in range(W – 1):
if S[h][w] == ‘.’ and S[h][w +
HHKB プログラミングコンテスト 2020のメモ
# 前置き
Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。# 問題
https://atcoder.jp/contests/hhkb2020
# A
“`Q_A.go
package mainimport (
“fmt”
)func main() {
var s string
fmt.Scan(&s)var t string
fmt.Scan(&t)if s == “Y”{
if t == “a”{
t = “A”
} else if t == “b”{
t = “B”
} else if t == “c”{
t = “C”
}
}fmt.Printf(“%s\n”, t)
}
“`# B
“`Q_B.go
package mainimport (
“fmt”
“strings”
)func m
DockerでのRailsアプリケーション構築
# 概要
Dockerの勉強会の際、作成したリポジトリがありそのまま埋めてるの勿体無いと思ったので記事にしました。
どなたかの参考になればいいなぁと思ってます。https://github.com/yodev21/docker_tutorial_rails
# 作業手順
# ファイル作成
下記ファイルを作成“`
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
“`“`Dockerfile
# イメージ名にRuby(Ver2.6.5)の実行環境のイメージを指定
FROM ruby:2.6.5# パッケージのリストを更新しrailsの環境構築に必要なパッケージをインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs# プロジェクト用のディレクトリを作成
RUN mkdir /myapp# ワーキングディレクトリに設定
WORKDIR /myapp# プロジェクトのディレクトリにコピー
C
絶対に転職すると心に誓ったのでgolangで”hello word” してみた
自社開発web系企業へ転職したいSES、受託開発企業で働く20代男性です。
今のスキルが伸びにくい環境と給料に不満を覚えたので、文句ばかり言わないで行動に移そうと心に誓ったのでGo言語を勉強することにしました。
Qiitaへ記事を書くことの練習を兼ねております。早速 hello word しましょう!
とりあえず準備
※エディター、homebrewはすでにインストールされていることを想定しております。
下記コマンドをターミナルに流す。“`
# homebrewのアップデート
$ brew update# goをインストール
$ brew install go
“`
以上でgoの準備は整いました。コードを書いていこう
以下がコード
“`hello.go
package mainimport (
“fmt”
)func main() {
fmt.Println(“hello world”)
}
“`以下コマンドで実行!
“`
$ go run hello.go
#以下、実行結果
hello world