LoginSignup
6
2

More than 3 years have passed since last update.

GoのValue操作メモ

Last updated at Posted at 2019-01-28
  • Goの reflect パッケージの Value 操作を見ていて、どの Kind にどの操作が使えるか混乱したのでgo-1.11.5のドキュメントを元に表にまとめた。
  • 紙幅の都合でいくつかのKindを下記のようにまとめた。
    • Int類: Int, Int8, Int16, Int32, Int64 のいずれか
    • Uint類: Uint, Uint8, Uint16, Uint32, Uint64 のいずれか
    • Float類: Float32, Float64 のいずれか
    • Complex類: Complex64, Complex128 のいずれか
  • 並び順はおおよそ、KindごとのGetter/Setter及びOverflowチェック、cap/len 操作、チャネル、関数、struct、添字アクセス、マップ、インタフェース、その他操作の順とした。
  • 下表のXは、あるKindに対してその操作がpanicせずに呼び出せる可能性があることを意味する。例えば、 SetStringKindString、かつ CanSet が真であれば panic しないが、この表は CanSet のような Kind にかかわらない条件は無視する。
Bool Int類 Uint類 Uintptr Float類 Complex類 Array Chan Func Interface Map Ptr Slice String Struct UnsafePointer
Can­Set X X X X X X X X X X X X X X X X
Set X X X X X X X X X X X X X X X X
Bool X
Set­Bool X
Bytes X
Set­Bytes X
Complex X
Set­Complex X
Float X
Overflow­Float X
Set­Float X
Int X
Overflow­Int X
Set­Int X
Pointer X X X X X X
Set­Pointer X
String X X X X X X X X X X X X X X X X
Set­String X
Uint X X
Overflow­Uint X X
Set­Uint X X
Cap X X X
Set­Cap X
Len X X X X X
Set­Len X
Close X
Recv X
Send X
Try­Recv X
Try­Send X
Call X
Call­Slice X
Field X
Field­By­Index X
Field­By­Name X
Field­By­Name­Func X
Num­Field X
Index X X X
Slice X X X
Slice3 X X
Map­Index X
Set­Map­Index X
Map­Keys X
Interface­Data X
Elem X X
Is­Nil X X X X X X
Addr X X X X X X X X X X X X X X X X
Can­Addr X X X X X X X X X X X X X X X X
Can­Interface X X X X X X X X X X X X X X X X
Interface X X X X X X X X X X X X X X X X
Convert X X X X X X X X X X X X X X X X
Is­Valid X X X X X X X X X X X X X X X X
Kind X X X X X X X X X X X X X X X X
Method X X X X X X X X X X X X X X X X
Method­By­Name X X X X X X X X X X X X X X X X
Num­Method X X X X X X X X X X X X X X X X
Type X X X X X X X X X X X X X X X X
Unsafe­Addr X X X X X X X X X X X X X X X X
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2