- 1. Golangで「アルゴリズム図鑑」で紹介されているソートを実装する
- 2. Goのwrap結局何がうれしいんや
- 3. GAEでGo1.9からGo1.11へ移行したらストレージでマルチリージョンのバケットが使用されていた
- 4. CloudFrontは同じURL+QueryStringでもキャッシュ応答しないケースがある
- 5. 兵庫県のCOVID19感染者状況のGraphQL APIを公開してみた。
- 6. Mステで好きなアーティストを見逃さないためのプッシュ通知サービス
- 7. お前らのGo開発環境は間違っている!GOPATHからの解放。
- 8. エンジニア向けオープンプロジェクトトレース
- 9. fasttextでwebサイト分類したかった
- 10. [Firebase Authentication]IDトークンをRevokeさせないユーザー情報更新
- 11. Docker + Go の Hello Worldビルド
- 12. 【Go】ポインタと変数宣言(new, make)
- 13. GAE/Go 2nd generationでDatastoreのmutationを使う上でトランザクションに気をつけろ!
- 14. 【Go】変数宣言の違い( := 、 var )
- 15. GoとVue.jsでTrello風Webアプリケーションを作成してみた
- 16. Go で GitHub App (Bot) を作る
- 17. Go の json.Marshal の思いがけない仕様
- 18. パワーワードが作れる?ランダム単語合成アプリを作ってみた
- 19. Docker + VSCodeでGoの環境構築(ホットリロード対応)
- 20. 【Go】MySQLのTimestamp型カラム(日本時間が入ってる)をtime.TimeにするとUTCになってしまうのを対応する
Golangで「アルゴリズム図鑑」で紹介されているソートを実装する
アルゴリズムの勉強とGoの勉強を兼ねて、[アルゴリズム図鑑 絵で見てわかる26のアルゴリズム](https://www.amazon.co.jp/dp/B07179Q3MJ/) で紹介されているソートを実装してみました。
各ソートの仕組みは、検索するとわかりやすい解説が出てくるかと思います。
初めてGoを触ったので、書き方がGoっぽくない可能性大です。
自分向けの備忘用途がメインですが、参考程度に使ってもらえれば嬉しいです。## バルブソート
サンプルコード
“` main.go
package mainimport (
“fmt”
)func sort(nums []int) []int {
for i := 0; i < len(nums); i++ { isSwapped := false for j, value := range nums[:len(nums)-i-1] { if value > nums[j+1] {
nums[j] = nums[j+1]Goのwrap結局何がうれしいんや
#goのwrap結局何が嬉しいのか
先日go1.13から実装された[wrapについての記事](https://qiita.com/mochosan/items/eceacef3a8453cfdb3bf)を書いたのですが,自分で例とかも書きながら、これって本当にうれしいんか?というか何が嬉しいんやろという疑問がありました。そこで、自分の社内の先輩に嬉しいところを聞いてみたところ、なぁぁぁぁるほどぉぉぉというお答えを頂けたので、自分なりにまとめて書いてみようと思います。
#嬉しいところ
僕が前の記事でエラーをラップすると嬉しいこととして、下位の関数で発生したえらーを上位の関数にシンプルな形でエラーを返せるというような説明をしました。これは本当に嬉しいことでは無かったです。書きながら自分でも疑問だったのですが、結局unwrapするんだしwrapする必要あるのか?ということです。
本当に嬉しかった事としては、もし、下位の関数で定義したエラーを上位の関数に返してしまうと、上位の関数が下位の関数に依存してしまう事になります。ここで、エラーを上位の関数が定義したエラーでwrapする事で依存を防GAEでGo1.9からGo1.11へ移行したらストレージでマルチリージョンのバケットが使用されていた
*メモ的な感じで記載しています。
2020年3月2日に2020年2月請求として¥3円が発生。
何事かと思い請求内容を確認したところ、ストレージのマルチリージョンに対して請求があった。
今年の1月までは無料トライアル期間であったため気がついていなかった。どうやら移行作業を行なった時からストレージのマルチジーリョンのバケットが使用されていることがわかった。
当時(昨年末)、Go1.9からGo1.11へ移行するため試行錯誤し、やっとデプロイできる様になったので、
問題なくデプロイできるか確認するために何度もデプロイを行なった。
(Mac のターミナルで gcloud app deploy を実行)
結果、ビルド?されたファイルが多く作成され、数百MBも使用していた。調べた結果、次のことがわかった。
・デプロイするとローカルにあるソースがストレージ(標準?のリージョン)へアップロードされる。
・次に、Cloud Build サービスを使用してコンテナイメージを作成される。
・コンテナイメージが App Engine へ適用される。ん?Cloud Build サービス?
Go
CloudFrontは同じURL+QueryStringでもキャッシュ応答しないケースがある
## はじめに
あるAPIサービスが、CloudFront + API Gateway + Lambda という構成で稼働しており
CloudFrontは、`URL+QueryString`ごとにキャッシュし、応答速度をあげるために使用しています。## 事象
このAPIサービスには、Go/PHPそれぞれで実装されたプログラムがHTTPリクエストを送ります。
CloudFrontの設定は以下の通り。(関連設定のみ)| 設定項目 | 設定値 |
|——–|——-|
| Cache Based on Selected Request Headers | None |
| Object Caching | Customize
MinTTL:0
MaxTTL: 86400
DefTTL: 86400 |
| Forward Cookies | None |
| Query String Forwarding and Caching | Forward all, cache based on all |
| Compress Objects Auto兵庫県のCOVID19感染者状況のGraphQL APIを公開してみた。
# どんなAPIにしたか
3分ごとに
↓↓↓よりエクセルファイルをダウンロードし
https://web.pref.hyogo.lg.jp/kk03/corona_kanjyajyokyo.html
読み込んだデータをDBに書き込みます。
別のコンテナにgraphQLサーバーを用意して配信します。# コンテナ構成
– DB自動書き込み用コンテナ(pythonで実装)
– GraphQLサーバー(Goで実装)# ところが、残念ながら…(2020/3/18)
リリース後
定期実行される
pythonが読み込んでいる
エクセルファイルに想定外の変更が
`before`
`after`
画像の通りなんと空のセルで表現した二重線が追加されMステで好きなアーティストを見逃さないためのプッシュ通知サービス
# はじめに
たまの音楽番組で好きなアーティストのライブだけ見たいという要望があったので(僕)、見逃し防止Pushツールをつくりました。
# キーワード
・firebase
・ServiceWorker
・golang(beego)
・サブドメイン# 成果物
[livepush(ライブプッシュ)](https://livepush.shijimi.work/)好きなミュージシャンの出演タイミングをプッシュ通知してくれるサービスかんせい!https://t.co/IFsfP9MW2P pic.twitter.com/MpfCSRKM7U
— playtag551 (@playtag551) お前らのGo開発環境は間違っている!GOPATHからの解放。
#Welcome Gopher
Gopherの皆さんこんにちは。
Goの環境構築をより使いやすく、そしてシンプルにするためにこの記事を書きました。
Goの環境構築時に、GOPATHを設定した方が対象です。
## GOPATHからの開放
Goの開発環境を構築する際に、`GOPATH`を設定する記事が散見されます。
しかし、時代は変わるもの、Goのエコシステムも大きく変わろうとしています。
長い間Goの環境を支えてきた`GOPATH`も、`Go 1.13`からは廃止されたようです(たぶん)
Goの[ブログ](https://blog.golang.org/modules2019)にも記載されています
>Our aim is for Go 1.13, scheduled for August 2019, to enable module mode by default (that is, to change the default from auto to on) and deprecate GOPATH mode. In order to do that, we’ve b
エンジニア向けオープンプロジェクトトレース
https://www.reiwarss.com/OpenProject
Top tags
python
swift
javascript
go
C
C++
C#
Ruby
TypeScript
PHPfasttextでwebサイト分類したかった
[Wano株式会社](https://wano.co.jp/)のfushimiです。
先日、弊社の2020年の開発合宿(一泊二日)でやったネタを投稿します。合宿日記も兼ねてるので完全にとりとめのない時系列順の出来事の羅列になりますが、ご容赦ください。
# 未知のwebサイトの自動カテゴリ分けをしよう
自然言語処理や機械学習は全然わからん勢なのですが、せっかくの合宿なのでwebサイトのコンテンツ解析をして遊んでみました。作るものとしては表題通り、**webサイトのカテゴリ分類器** です。
あらかじめ決めたカテゴリ分類に応じて、入力された未知のWebサイトが適切にカテゴライズされることを目的とします。
## アプローチ
### 学習
* カテゴリごとのメディア記事をクロールして大量に集める
* 記事をきれいにする
* 記事を形態素解析する
* fasttextで学習済みモデルを作る### テスト
* 入力されたwebサイトのコンテンツをいくつか集める
* コンテンツをきれいにする
* コンテンツを形態素解析する
* 学習済みモデルに食わせて思った通りにカテゴリ[Firebase Authentication]IDトークンをRevokeさせないユーザー情報更新
# はじめに
Firebase Authenticationはドキュメントはかなり充実しているが、
実務で足りない箇所があったため、備忘録的に残しておきます。実装はGoとAngularで書かれています。
# IDトークンのRevokedをチェックする仕組み
フロント側でAuthorizationヘッダーにIDトークンを追加して、
APIのmiddlewareにてAuthoraizationヘッダーを検証します。“`ts:auth.ts
@Injectable({
providedIn: ‘root’
})
export class Auth {constructor(public afAuth: AngularFireAuth) { }
// getIdToken IDトークン
getIdToken(): Observable{
return this.afAuth.idToken;
}
}
“`“`ts:http.token.interceptor.ts
@Injectable()
export classDocker + Go の Hello Worldビルド
Dockerの中で go をビルドして、Hello World することがゴールです。
手順をシンプルに書いていきます。まず Docker と Docker-compose を入れておきます。これは省略します。
# Dockerディレクトリを作成
以下のようにファイルを作ります。
“`
./docker
./docker/.env
./docker/docker-compose.yml
./docker/go
./docker/go/Dockerfile./src/
./src/go
“`# Dockerの設定
## Docker全体用の設定
今回はコンテナは1つしか作りませんが、
今後の拡張を考えたつくりにはしておきます。
常にクセづけておくことで、迷うことがなくなります。“`shell:.env
COMPOSE_PROJECT_NAME=go-docker-starter
“`## goビルド用コンテナ
“`docker:docker-compose.yml
version: ‘3’
services:go:
build:【Go】ポインタと変数宣言(new, make)
Goには複数の変数宣言(メモリ割り当てと値の初期化方法)がある
&T{…}、 &someLocalVar、 new、 make など
## ポインタ型
基本こちらで理解
[ポインタ メモリアドレスの秘密](http://wisdom.sakura.ne.jp/programming/c/c20.html)
[徹底図解!C言語ポインタを初心者向けに分かりやすく解説](https://daeudaeu.com/programming/c-language/pointer/)
[Go言語のメモリ管理](https://ascii.jp/elem/000/001/496/1496211/)
## 自分なりの整理
・ポインタ型とはメモリアドレスを格納することができる変数
→ ポインタ型(=大元アドレス保持型)
→ 指定された変数のアドレスを保持、その大元アドレスを参照し新たにデータ領域を作成する## 【ポインタ型の宣言】 「new」 または 「&変数 によるアドレス指定」
基本こちらで理解
[Why would I make() or new()?
](htGAE/Go 2nd generationでDatastoreのmutationを使う上でトランザクションに気をつけろ!
僕は普段GAE/Goで開発をしているのですが、自社でdatastoreの機能をまとめたライブラリを作ることになって、[GoDoc](https://pkg.go.dev/cloud.google.com/go/datastore?tab=doc)を読んでいるときに初めて知ったのですが、datastoreにMutationがあるのをしりました!
それでMutationの使い方や使い所の記事を探したのですが、SpannerのMutationの記事と[公式ドキュメント](https://cloud.google.com/datastore/docs/reference/data/rest/v1/projects/commit?hl=ja)しか出て来なかったので、自分で記事を書くことにしました!# Mutationとは?
自分が探した限り、datastoreのmutationに関する説明は書いていなかったので、何とも言えないんですけど、
Insert, Update, Upsert, Deleteを一括で行うもので、副作用を起こすものですねで、何がよくなったかというと
– Inse
【Go】変数宣言の違い( := 、 var )
## 変数宣言の違い( := 、 var )
基本的にはこちらで理解
[他言語プログラマがgolangの基本を押さえる為のまとめ](https://qiita.com/tfrcm/items/e2a3d7ce7ab8868e37f7#%E6%A6%82%E8%A6%81)
## 自分なりの整理
#### :=
・varとタイプ型を省略(自動判断してくれるのか、初期化の時間・容量に無駄がでるのか)
・関数内のみで宣言可能#### var
・指定したタイプ型によって初期化される(ポインタ型はnilで初期化)
・関数外でも宣言可能“`Go:
func main() {
var a int
var b string
var c []intvar d *int
var e *string
var f *[]int
g := 1fmt.Println(a)
fmt.Println(b)
fmt.Println(c)fmt.Println(d)
fmt.Println(e)
fmt.Println(f)fmt.Println(g)
GoとVue.jsでTrello風Webアプリケーションを作成してみた
## 作ったもの
最近、プログラミングから少し離れていたので、思い出すこともかねてTrello風のWebアプリケーションを作ってみた。
![vue-trello – Google Chrome 2020_03_17 3_05_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279498/b545e34f-a1da-e8aa-97e0-ce7653247eb2.png)
▼デモ( https://x-color.github.io/vue-trello )
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279498/7f07b984-ce2b-8db6-c8d4-c11ff41d7c34.gif)▼完成品のリポジトリ
Go で GitHub App (Bot) を作るシンプルな GitHub App (Bot) を Go 言語で作ってみます。
順を追って作り方を解説していくので「サンプルコードだけ見たいよ」という方は[「まとめ」](#まとめ)に記載されているものをご参照ください。## 作るもの
下図のように Issue を作成すると `hello, ${username}` と反応してくれる Bot を作ります。
![githubapps1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586035/a648cead-5d5c-d8ac-d02c-854abd86e05e.png)
## 準備
GitHub に動作確認用のリポジトリを作っておきしょう。
また、GitHub から Webhook イベントを受け取る必要があるので、パブリックアクセス可能な URL が必要です。
今回は開発しながら適宜動作確認が行えるように [ngrok](https://ngrok.com/) というプロキシサービスを利用してローカル開発マシンのポートをインターネットにGo の json.Marshal の思いがけない仕様
# 結論
`json.Marshal` は、`uint8` 型のスライスを base64 文字列にする。
`int8` 型だったり スライスじゃなくて配列だったりすると配列になるけど。# ソースコードと実行結果
“`golang:golang
package mainimport (
“encoding/json”
“fmt”
)type S struct {
U8Array [3]uint8
U8Slice []uint8
S8Array [3]int8
S8Slice []int8
U8SliceP *[]uint8
PU8Slice []*uint8
IFSlice []interface{}
}func main() {
a:=uint8(1)
b:=uint8(2)
c:=uint8(3)
o := S{
U8Array: [3]uint8{1, 2, 3},
U8Slice: []uint8{1, 2, 3},
S8Array: [3]int8{1, 2, 3},
S8Slice: []int8パワーワードが作れる?ランダム単語合成アプリを作ってみた
# はじめに
クリックするだけ!ランダムに2つの単語を「反応」させて、パワーワードを作りましょう!![rand.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239887/df038918-b418-b274-9be1-20f82fcad614.gif)
モードは
– 形容詞+名詞
– 副詞+動詞
– 名詞+助詞+動詞の3種類です!
![phrases.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239887/90a32f70-1533-99a7-3fec-3f38f772eb53.gif)
# ソースコード
[GitHub – Syuparn/LiteralReaction: ランダムに単語を「反応」させて、パワーワードを作ろう](https://github.com/Syuparn/LiteralReaction)
(DockerやVue.jsをはじめて使ったので、汚いところもあると思います…ツ
Docker + VSCodeでGoの環境構築(ホットリロード対応)
## はじめに
個人開発で最近Go言語を使う機会が増えてきました。
Go言語で開発するにあたり私が感じたことは、– Dockerで動かしたい
– ホットリロード機能が欲しい
– 開発用・本番用でコンテナを分けたい
– 開発時は、VSCode上でコンテナ内とリモート接続して作業したい色々な方々のDocker環境を参考にDockerでGo環境を作りました。
よろしければ参考にしてください。## ホスト環境
– Docker: ver.19.03.8
– docker-compose: ver.1.25.4
– VSCode: ver.1.43.0## ホットリロード
Go言語でホットリロードをする際、調べていたら、– fresh
– realizeがあるのを知りました。
しかし、筆者は**realize** の方はエラー(`error: returned a non-zero code: 1`)が発生して`go get` ができませんでした。一度コンテナを立ち上げて、コンテナ内で`go get` したらうまく行くのですが解決出来ませんでした…
ですので
【Go】MySQLのTimestamp型カラム(日本時間が入ってる)をtime.TimeにするとUTCになってしまうのを対応する
こんにちは:smiley:
MySQLのTimestamp型カラムに`2020-03-12 15:00:00`(日本のおやつの時間!)が入っていて、それをGo言語のコードで`time.Time`型として取ってくると`”2020-03-12 15:00:00 +0000 UTC”`になってしまう。
あるとおもいます。
それを期待通りの値に直す小ネタです。
“`例.go
…
tempTime := dbResults[0].CreatedAt
location := time.FixedZone(“JST”, 9*60*60)
tempTime = tempTime.In(location).Add(-9*time.Hour)
log.Print(tempTime)
“`* 強引に`JST`に変換します。
* そのとき勝手に9時間足されてしまうので、自前で引き直します。↓
“`bash
2020/03/16 19:44:57 2020-03-12 15:00:00 +0900 JST
“`やったぜ。
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた