本記事では、2022年末時点でGitHub Sponsorsで支援している方を勝手に紹介していこうと思います!
現在支援させていただいているのはこちらの方々です。
- kt3kさん
- kazuponさん
- sosukesuzukiさん
- yhattさん
- yusukebeさん
以下、順番に紹介させていただきます。
続きを読むこちらは Goクイズ Advent Calendar 2020 - Qiita の17日目の記事です。
今回はMethod values (メソッド値) の問題です。(前回のGo Language Specification輪読会で見付けたものです)
package main import "fmt" type I interface { M() int } type T struct { a int } func (t T) M() int { return t.a } func main() { var t *T = &T{a: 1} f1 := t.M var i I i = t f2 := i.M t.a = 2 fmt.Println(f1(), f2()) }
f1(), f2()
の結果を問う、引っ掛け無しの問題となります。
さて、答えはどれでしょう?
1 1
1 2
2 2
こちらは Goクイズ Advent Calendar 2020 - Qiita の10日目の記事です。
今回は、皆さん大好きなiotaの問題です。
package main import "fmt" const ( X = 0 A, B, C = iota, iota + 1, iota * 2 D, _, E _, F, _ G = iota + iota ) func main() { fmt.Println(D + E + F + G) }
さて、答えはどれでしょう?
こちらは Goクイズ Advent Calendar 2020 - Qiita の3日目の記事です。
序盤と言うこともあるのでシンプルな一問です。
package main import "fmt" func main() { var x = nil fmt.Println(x) }
結果はどちらでしょう?
<nil>
Protocol Buffersのpackageの名前解決ルールを調べました。 このブログはproto3のドキュメントベースで書いています。
protobufでは、messageなどの定義名が衝突することを防ぐことを目的として、名前空間を分離できる package
と言う機構が提供されています。
説明を簡略化するために、本家のドキュメントを引用します。
Packages
You can add an optional package specifier to a .proto file to prevent name clashes between protocol message types.
package foo.bar; message Open { ... }
You can then use the package specifier when defining fields of your message type:
message Foo { ... foo.bar.Open open = 1; ... }
From: Language Guide (proto3) | Protocol Buffers | Google Developers
上記のように、importした側のprotoで、 foo.bar.Open
と言った形で別packageのmessageを参照することが出来ます。
protobufのPackage名ベースでの名前解決は、初めに innermost scope
から検索を開始する形で行われます。例としては、 foo.bar package
から X
messageの検索を始め、foo.bar package
内に見付からなければ、次は foo package
内に無いか探しに行くといった感じです。
https://developers.google.com/protocol-buffers/docs/proto3#packages_and_name_resolution
続きを読む気になったので調べてみました。
tsconfig.jsonには、コメントが書けます。
tsc --init
した時に生成されるtsconfig.jsonに、大量にコメントが付けられているので、すぐに気付くことと思います。
例)
{ "compilerOptions": { "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, /* Strict Type-Checking Options */ "strict": true /* Enable all strict type-checking options. */, "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */ } }
これについて深く考えたことも無く、どこかでこれは JSON5 だと言う噂を見ていた*1のでそうだと思っていました。
ところが、試してみたところJSON5なら使えるはずの豊富な文法が全然使えなかったり、JSONとJSON5にかけていたformatOnSaveの設定が効かなかったので、違うということに気付きました。
tsconfig.jsonにPrettierかからんなーと思ったけど、そもそもtsconfig.jsonはJSONじゃなかった事を思い出した。
— syumai (@__syumai) 2020年3月29日
*1:.babelrcはJSON5らしい https://babeljs.io/docs/en/config-files#supported-file-extensions