🎄
Go の文字列が事前宣言された識別子やキーワードか調べる
これは Go Advent Calendar 2024 の 9 日目の記事です。
Go には事前宣言された識別子やキーワードがあり、仕様書 (The Go Programming Language Specification) に一覧が記載されています。また、ある文字列がそれらに含まれるかどうかを判定する関数が標準ライブラリに用意されています。
Predeclared identifiers (事前宣言された識別子)
型、定数、ゼロ値、関数が含まれています。仕様書の Predeclared identifiers に一覧が記載されています。
Types:
any bool byte comparable
complex64 complex128 error float32 float64
int int8 int16 int32 int64 rune string
uint uint8 uint16 uint32 uint64 uintptr
Constants:
true false iota
Zero value:
nil
Functions:
append cap clear close complex copy delete imag len
make max min new panic print println real recover
これらは doc.IsPredeclared() で判定できます。
https://go.dev/play/p/bqHxtIkfiDx
package main
import (
"fmt"
"go/doc"
)
func main() {
for _, s := range []string{"any", "true", "nil", "append", "foo"} {
fmt.Println(s, doc.IsPredeclared(s))
}
}
any true
true true
nil true
append true
foo false
Program exited.
Keywords (キーワード)
func や return などが該当します。仕様書の Keywords に一覧が記載されています。
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
これらは token.IsKeyword() で判定できます。
https://go.dev/play/p/NMSonggIou2
package main
import (
"fmt"
"go/token"
)
func main() {
for _, s := range []string{"func", "return", "foo"} {
fmt.Println(s, token.IsKeyword(s))
}
}
func true
return true
foo false
Program exited.
Discussion