サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
ema-hiro.hatenablog.com
Overview 準備 自作 Linter を作る手順 GoAst Viewer で Ast の構造を視覚的に確認する 追記 x/tools/cmd/gotype singlechecker を使って検出する nodeFilter で階層を指定する Tips SuggestedFixes がめちゃくちゃ便利なので絶対に使う 使い方 ハマったところ Pos/End の位置 検査の出力結果をテストする ハマったところ ReviewDog 🐶 と組み合わせてみる ハマったところ まとめ See Also Overview Go の静的解析、というか x/tools/go/analysis package を利用して簡単にコードを検査する自作 Linter の実装に入門します。 今回使ったサンプル実装は以下に置いてあります。 github.com 準備 以下のツールを使います。 GoAst Vi
Overview 必要機材 手順 Kalidoface 3D にいってお好きなアバターを選ぶ OBS をDL して入力ソースの設定を行う OBS の DL & Install 入力ソースの設定 Zoom で OBS の仮想カメラをカメラのソースに指定する 配信時の Tips クロマキー設定して OBS の背景を透過させる。 Zoom の解像度に合わせて OBS の出力を調整する 感想 宿題系 Bluetooth との噛み合わせがイマイチ 追記 20220125 Overview Kalidoface3D というブラウザから3DモデルをトラッキングできるツールとOBS (Open Broadcast Software) を使って Mac 使いでもお手軽にアバターを纏ってオンラインMTGに参加できることが判明したのでその手順についてまとめます。 www.moguravr.com 僕自身アバター
Overview 背景 振り返り Good More 個人的な所感 コミュニケーションコストについて 最後に Overview 僕の担当してるプロジェクトの Slack チャンネルで1週間限定で スレッド利用原則非推奨 というルールを作って運用してみた振り返りです。 プロジェクトに関わるメンバーに協力してもらって以下のルールで1週間 Slack を利用してみました。 全ての投稿はチャンネルへの投稿する。ある依頼への返事やMTGに遅刻してる人を呼ぶDM的な使い方も含む。 Slack の流量が多くなることが想定されたので、気づいて欲しい時は臆せずメンションをつけること。 他部署や他プロジェクトの人に実験を強制するわけにはいかないので、その場合は例外的にスレッドの利用を許可しました。ただし、プロジェクトメンバーがスレッドで発言するときは also send to $Channel を必須にしても
Overview go get でプライベートリポジトリを fetch するのに、コケてその調査で時間を溶かすことが何度か重なったので対応方法について記載します。 またプライベートリポジトリに依存してるプロジェクトで Github Actions を回すときもプライベートリポジトリの取得部分でハマったのでそちらについても記載します。 プライベートリポジトリを go get する 何もしないままプライベートリポジトリを go get すると go get -u github.com/PRIVATE_REPO github.com/PRIVATE_REPO@vX.X.X: verifying module: github.com/PRIVATE_REPO: reading https://sum.golang.org/lookup/github.com/PRIVATE_REPO: 410 Go
これからgoでjson形式のデータをstructにmappingする際にはstreamを使うことを決意した話です。 経緯 下記のエントリーに触発されました。 christina04.hatenablog.com goでjsonをstructにmappingすることをはじめ、 io.Reader のデータを扱うときは一度 []byte 型に変換してから諸々の処理を行うというのが一般的な実装方法です。 一般的なjsonのmapping APIのレスポンスなど、goにおいて io.Reader 型を受け取り、[]byte に変換してからjsonのデータ構造をオブジェクトにmappingするときの一般的なコードは下のような形式になるかと思います。 client := http.Client{} resp, err := client.Get(url) if err != nil { fmt.Pri
やりたいこと 当初の想定は以下のような感じでRESTFullなwebサーバーを標準の net/http パッケージだけで書こうと思います。 package main import ( "fmt" "handler" "net/http" ) var port = 8000 type methodHandler map[string]http.Handler func (m methodHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){ if h, ok := m[r.Method]; ok { h.ServeHTTP(w, r) return } http.Error(w, "method not allowed.", http.StatusMethodNotAllowed) } func Router() *http.Se
いつからかわかりませんが、localのコンソールからGCPの各サービスのAPIを叩くときに以下のエラーが出てAPIが叩けないと言うことがありました。 err: dialing: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information. exit status 1 GCPの Application Default Credentials(ADC) が古い設定のまま更新されていなかったことが原因でした。 しかし、エラーメッセージにある Setting Up Authentication for Server to Server Production Applica
golangのstructでjsonのencodingのためのpropertyに omitempty をつけた時の挙動とその使いどこを検討します。 omitemptyタグとは https://golang.org/pkg/encoding/json/#Marshal には以下の用に記載されている。 The "omitempty" option specifies that the field should be omitted from the encoding if the field has an emptyvalue, defined as false, 0, a nil pointer, a nil interface value, and any empty array, slice, map, or string. omitempty属性をつけたstructのjsonのprop
Google App Engine上でマルチテナントなアプリを作る方法について調査したのでブログにまとめてみます。 マルチテナントとは? IT用語辞典には以下のように記載されています。 マルチテナントとは、SaaSやクラウドコンピューティングなどで、機材やソフトウェア、データベースなどを複数の顧客企業で共有する事業モデル。 マルチテナントとは1つのアプリケーションを複数のクライアントで共有することを意味します。 App Engineにおけるマルチテナント App Engineは Namespace API を使ったマルチテナントの実装がサポートされています。 具体的には 公式ドキュメント に以下のように記載されています。 複数のクライアント組織に対応する個別のデータ パーティション(テナント)を提供することで、「マルチテナンシー」をサポートできます。これにより、すべてのテナントで同じデータ
※ 当たり前のことでドキュメント通読すればいい話ですが、ちょっとハマったので備忘録として書きました。 Google Cloud Storage(GCS)に保存してあるデータを取得するという話です。 GCSから取得する時 storageパッケージを使います。 godoc.org データを取得するだけであれば以下のコードを書いて終了です。 func GetDataFromGCS(w http.ResponseWriter, r *http.Request) http.Handler{ ctx := appengine.NewContext(r) // Contextの作成 clinet, err := storage.NewClient(ctx) if err != nil { panic(err) } reader, err := client.Bucket("BUCKET_NAME").O
GolangでUnixタイムをISO8601形式に変換したいということがあって、実際に返還する際にFormatの指定の仕方でかなりハマりました。 こういった方の記事を参考にしたらすぐわかったのですが、 GO言語での日付処理 そもそもGoで時刻表記をするときにちょっとクセがあるのでメモとしてまとめてます。 GAE上では必ずUTC 最初にローカルで time を使ったときはJSTだったのですが、GAE上で動かしたときは自動的にUTCになってしまうので、JSTに変換しなければならない、というところでハマりました。 TimeZoneの話ではないんですね。 なので日本時間に合わせます。 import time func main () { var ( location := time.FixedZone("Asia/Tokyo", 9*60*60) now := func() time.Time {
Golangのtemplateファイルでisやnot equal、and条件、or条件の書き方を調べたので備忘録です。 ※ 適宜追加していきます。 is評価 {{ if eq num 1 }} // if num == 1 // 以下同義 {{ if eq ( .num, 1 ) }} not equel評価 {{ if ne .num 1 }} // if num != 1 //以下同義 {{ if ne (.num, 1) }} and 評価 {{ if and (eq .str1 "a") (eq .str2 "b") }} // if str1 == 1 && str2 == b and A B または and (A, B) になります。 or 評価 {{ if or (eq .str1 "a") (eq .str2 "b") }} // if str1 == 1 || str2
サマリ goのtimeパッケージの IsZero() はUnixTime = 0ではない GAEのdatasotreのdefaultの時刻で IsZero() を使ってもtrueを返さない IsZero()メソッドについて refs: time package - time - pkg.go.dev IsZero reports whether t represents the zero time instant, January 1, year 1, 00:00:00 UTC. IsZero()は 01-01 00:00:00 UTC の時にtrueを返します。 ここで注意するべきはtrueを返す時刻はunixtimeのスタート時刻 1970-01-01 00:00:00 +0000 UTC を指し示すわけではないということでです。 実際の挙動を見てみます。 def := time.Ti
CookieのDomain属性について調べたのでその備忘録(rfcの該当箇所を抜き出しているだけです。) 調べた背景はCookieを送信する先のDomainとPathについてです。 Domain属性 www.example.com , admin.example.com の用にdomainは同じでも複数のサブドメインでに向けてCookieを送信したい場合のDomainの書き方についてブラウザで見ると .example.com の等に書かれているが、この記法をそのまま使っていいのかわからなかったので調べました。 Domain属性についての邦訳 https://triple-underscore.github.io/RFC6265-ja.html#section-4.1.2.3 rfcではこちら https://tools.ietf.org/html/rfc6265#section-4.1.2
ema-hiro.hatenablog.com 昨日の上記エントリへの追記 TODO htmlファイルをdist以下に作成していましたが、frontendのファイルはsrc以下に管理します。 webpackでコンパイルしたらdist以下にhtmlファイルも出力させます html-webpack-pluginを使います install $ yarn add -D html-webpack-plugin $ yarn add -D html-loader webpack.config.js html-webpack-plugin と html-loader を加えてコンパイルの設定を更新する const src = __dirname + "/src"; const dist = __dirname + "/dist" var webpack = require('webpack'); con
fish を使っていて、 eval の設定方法がわからなかったので調べました。 参考 eval command in config.fish # evalの設定方法 # bashrc での rbenv の設定 # eval "$(rbenv init -)" と同様のことを書きたい時 eval (rbenv init - | source) # その他の書き方 # eval () ← zshやbashで言うところの $ を付けない # source () 直に指定 などなど
重複削除処理を実装する ruby でいうところの uniq メソッドみたいなものが golang の slice にもないのかと思って調べてみたけどないらしいので、重複のある slice に対して独自に処理を実装しなければ行けない。 go は非常にシンプルでLL言語をずっと書いていたエンジニアとしては覚えることが比較的少なく、静的型付けされていて安全で、高速という点で有用なツールだと思うけど、シンプルすぎる反面、LL言語ならデフォルトのAPIやメソッドとして提供されていそうな処理が実装されてなかったりすることが多い。。。 LL言語の処理をブラックボックス化してしまうことに比べれば、いいことのように感じる一方で、これくらい用意しておいてよ~的な感想もしばしば(笑) というわけで go における slice の重複削除の実装方法を調べてみた。 方法 mapを使う mapと空のstructを使う
このページを最初にブックマークしてみませんか?
『emahiro/b.log』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く