title: How does golang implement reflection?
body: <p>Using reflection,  we can get the type name, storage size and the function of the given type(such as uint64, user-defined struct and so on). Even, we can modify some fields of the given type.
  How does golang implement reflections? I guess the following ways:</p>
  
  <ol>
  <li><p>Every type in golang, including user-defined type,  itself has the information about type name, fields name and the function name. Golang reflection just reads these information or call the function.</p></li>
  <li><p>Through some mechanism, Golang can get the type name, storage size and so on. And the type itself doesn’t have these information.</p></li>
  </ol>
  
  <p>I have read the golang reflection code roughly. I guessed that golang used the second way. 
  Who can describe the concrete implement of reflection? Or recommend me some documents? Reading all code is difficult for me.</p>