infoMore 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せずに呼び出せる可能性があることを意味する。例えば、 SetString
は Kind
が String
、かつ CanSet
が真であれば panic しないが、この表は CanSet
のような Kind
にかかわらない条件は無視する。
|
Bool |
Int類 |
Uint類 |
Uintptr |
Float類 |
Complex類 |
Array |
Chan |
Func |
Interface |
Map |
Ptr |
Slice |
String |
Struct |
UnsafePointer |
CanSet |
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SetBool |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bytes |
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
SetBytes |
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
Complex |
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
SetComplex |
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
Float |
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
OverflowFloat |
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
SetFloat |
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
Int |
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OverflowInt |
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SetInt |
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pointer |
|
|
|
|
|
|
|
X |
X |
|
X |
X |
X |
|
|
X |
SetPointer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
String |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
SetString |
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
Uint |
|
|
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
OverflowUint |
|
|
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
SetUint |
|
|
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
Cap |
|
|
|
|
|
|
X |
X |
|
|
|
|
X |
|
|
|
SetCap |
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
Len |
|
|
|
|
|
|
X |
X |
|
|
X |
|
X |
X |
|
|
SetLen |
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
Close |
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
Recv |
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
Send |
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
TryRecv |
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
TrySend |
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
Call |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
CallSlice |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
Field |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
FieldByIndex |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
FieldByName |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
FieldByNameFunc |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
NumField |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
Index |
|
|
|
|
|
|
X |
|
|
|
|
|
X |
X |
|
|
Slice |
|
|
|
|
|
|
X |
|
|
|
|
|
X |
X |
|
|
Slice3 |
|
|
|
|
|
|
X |
|
|
|
|
|
X |
|
|
|
MapIndex |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
SetMapIndex |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
MapKeys |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
InterfaceData |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
Elem |
|
|
|
|
|
|
|
|
|
X |
|
X |
|
|
|
|
IsNil |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
|
|
|
Addr |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
CanAddr |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
CanInterface |
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 |
IsValid |
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 |
MethodByName |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
NumMethod |
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 |
UnsafeAddr |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
What you can do with signing up