はじめに こんにちは、LayerXの id:convto です。 そしてこれは LayerX アドベントカレンダー (概念) の1日目の記事です。 アドベントカレンダー盛り上げていくぞ〜ということで11月から始まるらしいです。だいぶフライングしてるけど枠もかなり埋まっててすごい。 せっかくなのでお祭り参加したいぞ〜ということで一発目です。よろしくお願いします。 静的解析つくろうとしたきっかけ ちょうどつい最近記事になった下記の輪読会がきっかけでした。 tech.layerx.co.jp このなかで、mapのrange accesssについて、元mapのcopyを取らないから破壊するとループ挙動が壊れる可能性がある旨が言及されていました。 そのときは雑談で「range accessしてるmapに再代入してたら怒る!みたいな考え方で整理したら静的解析できそうっすよね〜」みたいな話をしたんですが
We’re going to write useful linter for Go using go/analysis. Then we will integrate it into go vet and golangci-lint. What to lint Let’s find all printf-like functions that don’t end with f. It’s the Go convention to name such functions with f at the end: fmt.Sprintf, fmt.Errorf, fmt.Printf, fmt.Fprintf, fmt.Scanf, fmt.Sscanf, log.Printf, log.Fatalf, log.Panicf. Writing a simple linter Sample prog
お久しぶりです ちゃんと元気に生きています。 1ヶ月ほど禁酒していて体の調子がすごく良いです。その代わりアイスの消費量が増えました。毎日ハーゲンダッツとかガリガリ君とか食べてます。 独自Linterをgolangci-lintと統合する手順 まずこの記事でカバーする範囲について補足します。 Linter のコードの書き方については一切触れません 書いたあと、それを golangci-lint に組み込む方法についてがメインです 手順の説明のため、GitHub - golangci/example-plugin-linter: example linter that can be used as a plugin for github.com/golangci/golangci-lint をサンプルプラグインとして使用します。自前のプラグインコードがすでに手元にあればそれを使って応用しても良
The Go 1.18 release adds support for generics. Generics are the biggest change we’ve made to Go since the first open source release. In this article we’ll introduce the new language features. We won’t try to cover all the details, but we will hit all the important points. For a more detailed and much longer description, including many examples, see the proposal document. For a more precise descrip
Go1.18は2022年3月にリリースされました。このリリースはGo言語へのジェネリクスの実装を含んでいます。 この記事ではできるだけ最新の仕様と用語法にもとづいてジェネリクスの言語仕様について解説していきます。 更新履歴 2024/01/03: Go1.21(2023-08-08)でcmpパッケージが標準ライブラリに追加されたことに対応しました。 2023/02/23: Go1.20(2023-02-01)のcomparableの仕様変更に対応しました。 次の関連資料があります: The Go Blog - All your comparable types Griesemer氏によるGo公式ブログです。 Go言語のBasic Interfaceはcomparableを満たすようになる(でも実装するようにはならない) 上記の内容に対する筆者の解説記事です。Go1.20リリース前に書いたの
本書は技術書典6で@knsh14と共に執筆し、頒布したものです。(移動にあたってこっそり更新はしましたが)2022年5月現在では内容が古くなっている可能性があります。最新の情報を知りたい場合は公式ドキュメントまたは httsp://tenn.in/analhysis をご覧ください。 読者のみなさんは静的解析ツールを自作したことはありますか?コードレビューで頻出するような指摘事項は静的解析ツールを使って自動化するとコードレビューに取られる工数が減ります。golintやgo vetなどは使っている方は多いでしょう。 標準のものやサードパーティ製など様々な静的解析ツールを見かけます。しかし、自分たちの開発チームの事情を汲んだ静的解析ツールを見つけるのは難しいでしょう。そんなときに諦めてしまわずに自作するという選択肢があります。 本書はGoで静的解析を行う際に逆引きとして使えるように書いています
We use Golang (go) at Airplane and run all of our unit tests through a CI on each change in our monorepo. These tests were very slow, but we were able to use go test caching to speed them up by an order-of-magnitude (from minutes to seconds in many cases!). In the remainder of this post, we provide a high-level overview of how Golang test caching works and then describe how we adapted our CI workf
時刻を表す time.Time 型は比較演算子(==, <, > 等)が使えないので Equal(), Before(), After() 各メソッドが用意されているのだけど, Equal() メソッドはともかく Before() や After() は覚えれんっちうの! まぁドキュメントを見れば済む話なのだが,毎回「どうだっけ?」と探すのもナニなので,この際,記事として纏めておくことにした。 まずはコードを書いてみる。 これ基本。 package main import ( "fmt" "time" ) func main() { year2000 := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) year3000 := time.Date(3000, 1, 1, 0, 0, 0, 0, time.UTC) fmt.Printf("year30
WebSocketのツラミ 中継サービスの対応がないと切れる ルーターによっては長時間アクセスがないと切れる 切れたら繋ぎなおすのはクライアントの実装次第 セキュアにつなぐためにはサーバーもクライアントも新バージョンのサポートが必要 接続数が膨れず、安定して接続を維持するのには結構ノウハウが求められる 単純に切れたら即繋ぐでは中継やサーバーに問題が発生することもある そこでEventSourceですよ メジャーブラウザでサポート・互換性も高い プロトコル仕様がただのHTTPロングポール+アルファ なのでほとんどの接続経路で中継トラブルが少ない JSのEventSource実装がセッション維持を頑張ってくれる サーバーから切断されたら再接続をしようとする 特にGoなら標準機能でさっくりサーバーが書ける クライアント実装 let es = new EventSource("/sse"); es
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く