- 1. Goのhtml/templateでifする方法
- 2. VSCodeでGoのDebugにちょっとハマった話 ~firebase絡み~
- 3. [Go]メモリ効率を意識!スライス作成時は要素数と容量を決めよう
- 4. golang で Cloud KMS を使って暗号化/復号化をしてみた。
- 5. Goのsingleflight packageの紹介
- 6. 本番環境で使えるgRPC-Gateway【後編】
- 7. ローカル環境のみでの Go Modules と自作パッケージ
- 8. Azure Key Vault を利用した .env 内の機密情報の管理
- 9. 今更,GoでFizzBuzzしてから,3の付く世界でアホになる
- 10. Goで地形生成ツールを作る
- 11. 内部実装から理解するsingleflight
- 12. Go言語でS3から直接ダウンロードするURLを発行する時にファイル名を差し替える
- 13. 2019年末版:Chromebookを開発に使う
- 14. [Go] “database/sql”を使用してデータベースを触る
- 15. Goで快適な開発環境を手に入れるためにホットリロードツールを開発している話
- 16. Go言語のフレームワークGobotでドローンを制御してみた。
- 17. gRPCマイクロサービス用のgraphql-gatewayサーバーの紹介
- 18. 09. Typoglycemia
- 19. 過激派によるGoの勧め
- 20. gRPCでオンラインポーカーを作った話
Goのhtml/templateでifする方法
## if 0 == 0
“`
{{ if (eq .LikeCount 0) }}
{{ else }}
{{ end }}
“`## if true
“`
## {{ if .login_check }}
{{ else }}
{{ end }}
“`
VSCodeでGoのDebugにちょっとハマった話 ~firebase絡み~
VSCodeで[Firebase Admin SDK](https://firebase.google.com/docs/admin/setup?hl=ja)を用いたGoのDebugをしようとしてちょっとハマりました。
[SDK初期化](https://firebase.google.com/docs/admin/setup?hl=ja#initialize_the_sdk)でいきなりfirebase-adminsdk.jsonを読み込めなくて怒られる。。
“`golang
// SDK初期化
app, err := firebase.NewApp(ctx, nil, opt)
// err: “cannot read credentials file: open firebase-adminsdk.json: no such file or directory”
“`普通にgo runで起動した時はエラー出ないので、`launch.json`の設定で現在のディレクトリを明示する必要があるのではないかとアタリをつけてみる。
自分のプロジェクトの場合、`{root}/c
[Go]メモリ効率を意識!スライス作成時は要素数と容量を決めよう
# はじめに
**自己紹介**
Golangをメインにサーバーサイドエンジニアをやってます。
[Twitter](https://twitter.com/kskumgk63)スライスを作成時に要素数や容量は指定していますか??
指定しなくてもプログラムは動くので気にしていない方もいると思うのですが、今回は、要素数(length)と容量(capability)を指定すると何が嬉しいのかについて説明します。
# まずスライスの要素数と容量とは?
## スライスの要素数(length)
要素数10のintのスライスを作成してみます。
Goの組み込み関数である `make` を使うと簡単に作成できます。
https://play.golang.org/p/4JnTYHxbwW3
“`go
slice := make([]int, 10) // 要素数 = 10// [0 0 0 0 0 0 0 0 0 0]
“`このときスライスの中には10個のint型の初期値がはいっています。
つまりメモリ上に値0が10個用意されるということです。
string型だと指
golang で Cloud KMS を使って暗号化/復号化をしてみた。
こんばんわ! @ktoshi です!
今回は機密な情報をDBなどで保管する際に有効な [Cloud KMS](https://cloud.google.com/kms/) を利用した話です。
昨今、クラウドサービスなどのAPIを利用する機会が増えていると思いますが、その認証情報をどのように保存するかは非常に重要な問題です。
現に私もその問題に少し…いやかなり悩まされました。
そんな折、Cloud KMS というサービスを利用をすることとなりました。# Cloud KMS
暗号鍵をセキュアに管理できるGCPのサービスです。
自動ローテーションやIAMでの権限管理でセキュアなアクセスを実現できる上、APIを利用した暗号化/復号化を行えるので非常に柔軟な利用が可能です。
類似したサービスはAWSの「KMS」や Azureの「Key Vault」などがあります。# Key Ring と Key
Cloud KMS では Key を Key Ring で管理しています。
関係性は字のごとく、鍵と鍵束ですね。
ある程度同じ用途で使用される鍵については同じ Key Ring でまとめておくと
Goのsingleflight packageの紹介
このエントリーは、[Go5 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go5)の14日目のエントリーです。
今回、[singleflight Package](https://godoc.org/golang.org/x/sync/singleflight)の紹介をしたいと思います。 利用したことがない方は、一度、検討する材料となってもらえればと幸いです。
# What is singleflight?
singleflight とはなにかというと、次の通りになります。
> Package singleflight provides a duplicate function call suppression mechanism.
Package singleflightは、重複したfunction callをまとめるメカニズムを提供します。
私は、もしアプリケーションが同じリソースのための複数のリクエストを受けるようなことがあるのであれば、singleflightは、とても役に立つPackag
本番環境で使えるgRPC-Gateway【後編】
[VISITS Technologies Advent Calendar 2019](https://qiita.com/advent-calendar/2019/visits) 14日目は@istshが担当します。
この記事は[本番環境で使えるgRPC-Gateway【前編】](https://qiita.com/istsh/items/030933950f9fe8c82844)の続きで、gRPC Clientの実装についてまとめました。
また、前回と同様に、[サンプルコード](https://github.com/istsh/go-grpc-sample)を使って解説してきます。# goファイルを生成
[前編 – goファイルを生成](https://qiita.com/istsh/items/030933950f9fe8c82844#go%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E7%94%9F%E6%88%90) で、`login.pb.gw.go`も生成されていると思います。
`–grpc-gateway_out`オプ
ローカル環境のみでの Go Modules と自作パッケージ
# 概要
自作 package インポートできねーじゃんっていろいろやった結果。
GOPATH 配下にディレクトリがないときの話。# 環境
[windows への go インストール](https://qiita.com/tkj06/items/b174f48358f0cfe7cc31)go のバージョン、GOPATH、GOROOT、GO111MODULE の値は以下の通り。
“`
C:\goworkspace\gomodulesample>go version
go version go1.13.1 windows/amd64C:\goworkspace\gomodulesample>go env GOPATH
C:\Users\sampleuser\goC:\goworkspace\gomodulesample>go env GOROOT
c:\goC:\goworkspace\gomodulesample>go env GO111MODULE
on
“`# ファイル1つだけ
至極単純なやつです。C
└goworkspace
└gomodule
Azure Key Vault を利用した .env 内の機密情報の管理
# .env と機密情報
Laravel を利用したプロジェクトは通常 `.env` を使って環境変数を管理しています。`.env` には各種認証情報などを含めることもあると思いますが、それらは Git などのバージョン管理システムに平文で保存するべきではありません。
かと言って、どこにも管理されておらず稼動している環境に置いてあるだけの状態というのも心許無さがあります。そこで [Azure Key Vault](https://docs.microsoft.com/azure/key-vault/basic-concepts) (和名:キー コンテナー)の[シークレット](https://docs.microsoft.com/azure/key-vault/about-keys-secrets-and-certificates#key-vault-secrets)と、Go で書いた簡素な [vaultenv](https://github.com/sensyn-robotics/vaultenv) というツールで、 `.env` に直接機密情報を記述することなく管理できるようにし
今更,GoでFizzBuzzしてから,3の付く世界でアホになる
# 前置き
これはNISE (南山大学 青山研究室) Advent Calendar 2019の13日目の記事です.
昨日は,後輩の[@RomuskaPaloUrLaputa](https://qiita.com/RomuskaPaloUrLaputa)がpythonのデータプロットについて書いてくれました.いや,まさかの解決策がすぐにコメントされるのはちょっと面白いw
今回は,結構今更感あるなーとか,既知感満載とかいうコメントを見なかったことにして,これから就活とかでコーディングテストがあるときの参考になればと思います.
# とりあえず,FizzBuzz書いて
こんな風に面接官に言われ,自分の後ろにあるホワイトボートに立たされたあなた.
言語はなんでもいいという
さて,どんな風に書きますか??
## want to do
– とりあえず,1~10000くらいまで
– 3の倍数ではFizz
– 5の倍数ではbuzz
– 15の倍数ではFizzBuzzとまあ,わざわざ書かなくてもって感じですよねw
## 実装
Goで今回は実装しました.
そのコードは以下に
Goで地形生成ツールを作る
この記事は[tomowarkar ひとりAdvent Calendar 2019](https://qiita.com/advent-calendar/2019/tomowarkar)の13日目の記事です。
カレンダーも折り返し地点ですね。
# はじめに
[Goで画像生成をして遊んでいたら](https://qiita.com/tomowarkar/items/2aea52ac512e895b0a42)もう少し本格的なものを作ってみたく、機能を追加しつつツール化してみました。完璧自己満足案件ですね?
ランダムドットの生成に加え、以下記事を参考に中点変位法を用いたマインクラフトのようなワールドマップの生成を手軽にできるようにしました。
[中点変位法 世界生成?](https://qiita.com/Gaccho/items/d0748d630b311f620f92)
現状ランダムドット画像の生成、中点変位法を用いた画像生成の二つの機能しかありませんが、ゆるりと機能追加していけたらなーという次第です。
# 使い方
### ソースコード
内部実装から理解するsingleflightこの記事はGo Advent Calendar 2019 13日目の記事になります
## singleflightとは
singleflightは`golang/sync`にあるパッケージでキーを指定することで、同じキーへの重複処理を回避することができる関数が用意されています。通常のバージョンとchannelを使ったバージョンが用意されています。
以下のようにして使います。
https://play.golang.org/p/KTGhiBv4MCz
“`go
package mainimport (
“fmt”
“log”
“sync”
“time”“golang.org/x/sync/singleflight”
)var group singleflight.Group
func API() string {
fmt.Println(“—-API called—-“)
<-time.After(100 * time.Millisecond) return time.Now().String() } func callAPI(nam
Go言語でS3から直接ダウンロードするURLを発行する時にファイル名を差し替える
ちょっとハマったのでメモ
差し替えのファイル名は”response-content-disposition”にセットする必要がある。
object inputのparamでResponseContentDispositionを指定できるようなのでそちらで指定する“`
svc := s3.New([s3 setting params])// 日本語ファイル名にしたい場合はURLエンコードが必要
fileName := fmt.Sprintf(“attachment; filename=%s”, url.QueryEscape(“ファイル名”))params := &s3.GetObjectInput{
Bucket: aws.String([bucket name]),
Key: aws.String([key]),
ResponseContentDisposition: &fileName,
}req, _ := svc.GetObj
2019年末版:Chromebookを開発に使う
PySpaアドベントカレンダーのエントリーです。昨日はYesterdayでした。今日はTodayです。
ずっと開発や普段使いで使えるChromebookが欲しいと思っていました。勉強会の発表ですし、きちんと技適が通ったやつで、性能がまとも(以前ATOMベースのマシンにLinux入れたけど遅くて使う気になれなかったので)なやつを待ち望んでいました。
7月ぐらいからHPがChromebookを販売開始してくれました。気づいてから申し込んだものの、予想外に受注があったのか、納期が伸びに伸びて1ヶ月半近くかかりましたが、とても良いものだったので、今ではすっかりメインで使っています。
バージョンによって状況はまた変わってくるかもしれないので、タイトルに日時を入れました。これを書いた時点でのバージョンは78.0.3904.106(Official Build)(64 ビット)でした。
# 日本のChromeOS機の状況
アメリカとイギリスではGoogleがフラグシップ機のPixelbookおよびPixelbook Goを販売しています。Core i5やi7も選べ (Pixelbookは7
[Go] “database/sql”を使用してデータベースを触る
# 概要
Goの標準パッケージである “database/sql” を使用してデータベースを触る。
パッケージのGodoc### 環境
– macOS 10.14.6
– go version go1.13.4 darwin/amd64
– Mysql:5.7 (Dokcerで構築)“database/sql”は汎用的なデータベースのインタフェースを提供するパッケージである、
このパッケージは、データベースドライバーと一緒に使用しなければならない。
詳しくは# 前準備
とりあえずデータベースハンドラーを作る必要がある。
ちなみにハンドラとは、いつも待機していて必要なときに起動されるプログラムのことらしい。
つまりこいつがないとデータベースをいじれない。
(筆者の中ではコネクティングするための情報などが格納されていると認識しています。ご指摘ください。)そのハンドラの作り方。
Goで快適な開発環境を手に入れるためにホットリロードツールを開発している話
この投稿は、 [Go4 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go4)の 13日目のものになります。
# はじめに
例えばWebアプリケーションを開発する際などに、ソースコードの変更を検知して自動で再ビルドをしアプリケーションを起動する、所謂ホットリロードを行う機能はだいたいのメジャーな言語で何かしらの形で提供されていると思います。Goにもいくつかのライブラリが存在していて、おそらくメジャーなものといえば [fresh](https://github.com/gravityblast/fresh) と [realize](https://github.com/oxequa/realize) の2つだと思います。
僕自身も`fresh`には数年ほどお世話になっており、実際にプロジェクトの開発でも使用しています。
しかしながら、`fresh` を使用していく中でこのライブラリがいくつかの問題を抱えていることもわかりました。– メンテナンスがされていない
– `mod=vendor` のような仕組み
Go言語のフレームワークGobotでドローンを制御してみた。
[LIFULL Advent Calendar 2019](https://qiita.com/advent-calendar/2019/lifull) 13日目の記事になります。
仕事では主にSalesforceやRPAなどのアプリケーション開発に関わっている新卒1年目Webエンジニアです。
9月にメルペイ主催のGopher道場に参加したことをきっかけに、Goの技術中心に最近はキャッチアップしています。そんな中、GoはIoTにも活用できると聞き、試してみたいと思っていたのでドローンtelloを購入しました。
今回はそんなドローンをGoのフレームワークGoBotで色々動かしてみた話をします。
# Gobotとは
Gobotは以下の35のプラットフォームに対応したGo言語のロボティクス・IoTフレームワークになります。ARDrone/Arduino/Beaglebone/Black Bebop/Bluetooth LE/C.H.I.P./C.H.I.P. Pro /Digispark/DJI Tello/Dragonboard/ESP8266/GoPiGo3/HS-200
gRPCマイクロサービス用のgraphql-gatewayサーバーの紹介
これは [GraphQL Advent Calendar 2019](https://qiita.com/advent-calendar/2019/graphql) 14日目の記事です。
今回は私が趣味で作っているGraphQL Gatewayについての紹介になります。
gRPCのecosystemには、[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway)というJSONのREST-APIに変換するリバースプロキシサーバーが存在し、protocol bufferから自動生成することができます。
GraphQL Gatewayも同様にprotocol bufferからGraphQL用のリバースプロキシサーバーを自動生成して使用することができます。Githubのリポジトリ
https://github.com/grpc-custom/graphql-gateway## インストール方法
前提条件として、Golangでの開発環境に限ります。
`protoc-gen-graphql-gateway`をインスト
09. Typoglycemia
## 09. Typoglycemia
スペースで区切られた単語列に対して,各単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに並び替えるプログラムを作成せよ.ただし,長さが4以下の単語は並び替えないこととする.適当な英語の文(例えば”I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind .”)を与え,その実行結果を確認せよ.###Go
“`go
package mainimport (
“fmt”
“math/rand”
“strings”
“time”
)/*
* 配列からランダムで1要素を取り出し値を返す、またその配列は削除する
*/
func choice(m *[]string) string {
// 値数内の乱数を発生
i := rand.Intn(len(*m))// 該当の単語を取得しマップから削除
str := (*m)[i]// これは便利(
過激派によるGoの勧め
モバイルエンジニアとして、CBcloudに参画したbigbackboomです。メインでAndroidアプリの開発を行なっています。今回Adventカレンダー二度目の投稿です。
弊社では全く使用されていない**Go**ですが、私が前社でGoのサーバーを設計開発をしたので、私自身はGoをかなりの推し言語としています。今回は、Goの良いとこ、悪いとこを書いていこうと思います!
# go言語って?
**Go**はオープンソースのマルチプラットフォームで動くコンパイル型言語です。言語仕様に、型安全、信頼、効率の三つに主眼をおいた言語です。元々は2007年にGoogleに所属していた、ロバート・グリーズマー、ロブ・パイク、ケン・トンプソンが考案し、2009年に正式に発表されました。彼らは**良いプログラミング言語**とは[以下のように定義](https://web.stanford.edu/class/ee380/Abstracts/100428-pike-stanford.pdf)しました。
– 簡潔かつリーダブルな言語
– 静的型付
– webpageなどでの軽量差
– 速い
– ス
gRPCでオンラインポーカーを作った話
ここ何ヶ月か合間の時間を見繕って勉強がてらgRPCとgoでオンラインポーカーを作っていたのでご紹介してみる(ソースがあれですみません。。
* proto
https://github.com/admogh/online-porker-protos
* server
https://github.com/admogh/online-porker-server
* client(go)
https://github.com/admogh/online-porker-clientsDockernizeしていないのでそのままですが多分諸々入れればローカルで動作するようになっています。
# 仕様
* ポーカーのルール的には古いクローズドなファイルカードドローで(ただし現状ベッティング要素なし)、4人プレイ専用で、単純に1人ずつカード交換をします。
* 他のクライアントからの接続がない場合Wait後残りのプレイヤーをNPCとしてゲームが開始されます。
* 基本的にクライアントが何もしないとサーバ側で自動的にタイムアウトしたとみなして処理を進めていきます。
* リクエスト的には