)]}'
{
  "commit": "fb175cf77ef3a0c49e6bbdb54639fd51dd9a750f",
  "tree": "9f072be39d83b3a38f53ab0d57c745d6b851a9fd",
  "parents": [
    "846a368b8813d6ce1e26a3754ce2a66f73903df1"
  ],
  "author": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Fri Apr 08 12:26:51 2011 -0400"
  },
  "committer": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Fri Apr 08 12:26:51 2011 -0400"
  },
  "message": "reflect: new Type and Value definitions\n\nType is now an interface that implements all the possible type methods.\nInstead of a type switch on a reflect.Type t, switch on t.Kind().\nIf a method is invoked on the wrong kind of type (for example,\ncalling t.Field(0) when t.Kind() !\u003d Struct), the call panics.\n\nThere is one method renaming: t.(*ChanType).Dir() is now t.ChanDir().\n\nValue is now a struct value that implements all the possible value methods.\nInstead of a type switch on a reflect.Value v, switch on v.Kind().\nIf a method is invoked on the wrong kind of value (for example,\ncalling t.Recv() when t.Kind() !\u003d Chan), the call panics.\n\nSince Value is now a struct, not an interface, its zero value\ncannot be compared to nil.  Instead of v !\u003d nil, use v.IsValid().\nInstead of other uses of nil as a Value, use Value{}, the zero value.\n\nMany methods have been renamed, most due to signature conflicts:\n\n           OLD                          NEW\n\n    v.(*ArrayValue).Elem             v.Index\n    v.(*BoolValue).Get               v.Bool\n    v.(*BoolValue).Set               v.SetBool\n    v.(*ChanType).Dir                v.ChanDir\n    v.(*ChanValue).Get               v.Pointer\n    v.(*ComplexValue).Get            v.Complex\n    v.(*ComplexValue).Overflow       v.OverflowComplex\n    v.(*ComplexValue).Set            v.SetComplex\n    v.(*FloatValue).Get              v.Float\n    v.(*FloatValue).Overflow         v.OverflowFloat\n    v.(*FloatValue).Set              v.SetFloat\n    v.(*FuncValue).Get               v.Pointer\n    v.(*InterfaceValue).Get          v.InterfaceData\n    v.(*IntValue).Get                v.Int\n    v.(*IntValue).Overflow           v.OverflowInt\n    v.(*IntValue).Set                v.SetInt\n    v.(*MapValue).Elem               v.MapIndex\n    v.(*MapValue).Get                v.Pointer\n    v.(*MapValue).Keys               v.MapKeys\n    v.(*MapValue).SetElem            v.SetMapIndex\n    v.(*PtrValue).Get                v.Pointer\n    v.(*SliceValue).Elem             v.Index\n    v.(*SliceValue).Get              v.Pointer\n    v.(*StringValue).Get             v.String\n    v.(*StringValue).Set             v.SetString\n    v.(*UintValue).Get               v.Uint\n    v.(*UintValue).Overflow          v.OverflowUint\n    v.(*UintValue).Set               v.SetUint\n    v.(*UnsafePointerValue).Get      v.Pointer\n    v.(*UnsafePointerValue).Set      v.SetPointer\n\nPart of the motivation for this change is to enable a more\nefficient implementation of Value, one that does not allocate\nmemory during most operations.  To reduce the size of the CL,\nthis CL\u0027s implementation is a wrapper around the old API.\nLater CLs will make the implementation more efficient without\nchanging the API.\n\nOther CLs to be submitted at the same time as this one\nadd support for this change to gofix (4343047) and update\nthe Go source tree (4353043).\n\nR\u003dgri, iant, niemeyer, r, rog, gustavo, r2\nCC\u003dgolang-dev\nhttps://golang.org/cl/4281055\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f616adaac3600fad3e709e4390ebe59609964d7d",
      "old_mode": 33188,
      "old_path": "src/pkg/reflect/all_test.go",
      "new_id": "bc9157672a0ec3004a5511e2b6ab70fb2dd3f3e2",
      "new_mode": 33188,
      "new_path": "src/pkg/reflect/all_test.go"
    },
    {
      "type": "modify",
      "old_id": "c9beec5066659682be423f00ca7e31c8bb7b15c9",
      "old_mode": 33188,
      "old_path": "src/pkg/reflect/deepequal.go",
      "new_id": "f5a7814601d820038a3a1589a65df2841ed671a3",
      "new_mode": 33188,
      "new_path": "src/pkg/reflect/deepequal.go"
    },
    {
      "type": "modify",
      "old_id": "a1487fdd2fe806b95891200f62581f9030a843ba",
      "old_mode": 33188,
      "old_path": "src/pkg/reflect/tostring_test.go",
      "new_id": "5f5c52b778aa491218f3f7ce7a27072b3b4418d7",
      "new_mode": 33188,
      "new_path": "src/pkg/reflect/tostring_test.go"
    },
    {
      "type": "modify",
      "old_id": "2cc1f576aa00c5dcd541c82cfe0b3871b177fecd",
      "old_mode": 33188,
      "old_path": "src/pkg/reflect/type.go",
      "new_id": "9f3e0bf6827262ffefab06273358458497807931",
      "new_mode": 33188,
      "new_path": "src/pkg/reflect/type.go"
    },
    {
      "type": "modify",
      "old_id": "01a40ec9a47755874411f765091d6df7f683d02a",
      "old_mode": 33188,
      "old_path": "src/pkg/reflect/value.go",
      "new_id": "eeae6cce542934cfa6e2535af752162689f88424",
      "new_mode": 33188,
      "new_path": "src/pkg/reflect/value.go"
    }
  ]
}
