2023/12/2 Go Conference mini 2023 Winter IN KYOTO #kyotogo https://gyazo.com/d7abf3ca8a8492809b43e001642a71a3
https://www.youtube.com/watch?v=Dw8ELeFKqLY
Opening
Deep dive into log/slog package Kanata Miyahana
Goプログラムがビルドされるまで(コンパイラーの仕組みを探る) Richard Rowland
Goにおけるcall graphを用いた大規模コードベースの影響調査 Yoshiki Fujikane
Parsing case study in Go Ken'ichirou Oyama
日時処理の新スタンダード: Synchro によるタイムゾーン安全、楽々開発 Kei Kamikawa
Go1.22で導入予定だったzeroというbuilt-inについての紹介 Takuma Shibuya
Go Getでのchecksum不一致に遭遇した話とその対応 Natsumi Kojima
CUE+Goで安全かつ簡単に設定ファイルを自動生成してみた Naoki Kuroda
context.WithoutCancelについて語る Momo Ito
Golangを使ったDB用負荷テストツールの開発 Genki Sugawara
會場着ne-sachirou.icon
インターフェースのラッパーを作る際の落とし穴 by mazrean
生成AIによる静的解析ツールの自動生成 by tenntenn
靜的解析
x/tools/go/analysis package
go vet
analysis package
custom analyzers
linter 以外も作れる樣に # 61345
ChatGPT
巨大 PDF (靜的解析の解說書) を⻝はせられるのか
穴埋め prompt
// TODO と書いて埋めさせる
京都のおすすめの御土產も敎へてくれる (?)
The Future of encoding/json by iamshunta
encoding/json
since 2008
io.Reader から Unmarshal できない
[]byte を返す。memory alocation が必要
streaming できない
invalid な UTF-8
key の重複
reflection による制限
case insensitive
encoding/json/v2
https://gyazo.com/1cf1f04cd361869a509edf06290e3082
jsontext package + json package
struct tag
omitzero
nocase
inline
unknown
format
time.Time 等
opts ...Options
続) TinyGo で作る自作キーボードの世界 by sago35
layer 機能
Fn key の類似
key map の動的變更・保存
VIA
Remap
Vial
触って理解するGoコンパイラの最適化 市川悠人
最適化
zero size (struct{}) の memory allocation 囘避
cast 最適化 m[string(b)]
zero clear 最適化
for i := range a { a[i] = 0 }。memclr 函數が使はれる
今後は clear 函數を使へ
inline 展開
escape 解析
heap に escape (alloc) | stack に積まれる
mark scan 囘避
Ghidra
開発チーム横断タスクフォース「Goサブ会」の運用事例と今後の展望 by stefafafan
プロダクションで使うGo Pluginの利便性とパフォーマンス性 Tomohisa Oda
knqyf263/go-plugin
Revolutionising Inheritance with Generics: A Fresh Approach in Go Gaurav Suryawanshi
net/http から net.Conn を掘り起こす Hiroya Onoe
GoとテストとインプロセスDB Daisuke Makiuchi
ブログのリアクションから始めるGoのパフォーマンス分析入門 Takayuki Miyahara
GoのProtocプラグインを活用した効率的なgRPC負荷試験戦略 Shota Iwami
作ってよかったgraceful shutdownライブラリne-sachirou.icon
Closing
1
code:double defer sandwich.go
package main
import (
"fmt"
"runtime"
)
func main() {
var (
normalReturn bool
recovered bool
panicValue any
)
defer func() {
switch {
case normalReturn:
fmt.Println("normal return")
case recovered:
fmt.Println("recovered", panicValue)
default:
fmt.Println("runtime.Goexit")
}
}()
func() {
defer func() {
panicValue = recover()
}()
f()
normalReturn = true
}()
if !normalReturn {
recovered = true
}
}
func f() {
runtime.Goexit()
}
2
code:go
package main
import (
"encoding/json"
"os"
)
type SecureString struct{ s string }
type T struct {
Email SecureString json:"email,omitempty"
}
// エラーは発生しない前提
func main() { json.NewEncoder(os.Stdout).Encode(T{}) }
{"email":{}}
4
code:go
package main
type T struct {
N int
}
func main() {
t := T{N: 100}
println(t == t)
}
./prog.go:10:10: invalid operation: t == t (struct containing [0]func() cannot be compared)