第十二章 反射

Go語言提供了一種機制,能夠在運行時更新變量和檢查它們的值、調用它們的方法和它們支持的內在操作,而不需要在編譯時就知道這些變量的具體類型。這種機制被稱為反射。反射也可以讓我們將類型本身作為第一類的值類型處理。

在本章,我們將探討Go語言的反射特性,看看它可以給語言增加哪些表達力,以及在兩個至關重要的API是如何使用反射機制的:一個是fmt包提供的字符串格式化功能,另一個是類似encoding/json和encoding/xml提供的針對特定協議的編解碼功能。對於我們在4.6節中看到過的text/template和html/template包,它們的實現也是依賴反射技術的。然後,反射是一個複雜的內省技術,不應該隨意使用,因此,儘管上面這些包內部都是用反射技術實現的,但是它們自己的API都沒有公開反射相關的接口。