<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 反射的性能 ### 創建對象 ``` func BenchmarkNew(b *testing.B) { var config *Config for i := 0; i < b.N; i++ { config = new(Config) } _ = config } func BenchmarkReflectNew(b *testing.B) { var config *Config typ := reflect.TypeOf(Config{}) b.ResetTimer() for i := 0; i < b.N; i++ { config, _ = reflect.New(typ).Interface().(*Config) } _ = config } ``` 性能 ``` BenchmarkNew-8 26478909 40.9 ns/op BenchmarkReflectNew-8 18983700 62.1 ns/op ``` ### 修改字段的值 通過反射獲取結構體的字段有兩種方式,一種是`FieldByName`,另一種是`Field` ``` func BenchmarkSet(b *testing.B) { config := new(Config) b.ResetTimer() for i := 0; i < b.N; i++ { config.Name = "name" config.IP = "ip" config.URL = "url" config.Timeout = "timeout" } } func BenchmarkReflect_FieldSet(b *testing.B) { typ := reflect.TypeOf(Config{}) ins := reflect.New(typ).Elem() b.ResetTimer() for i := 0; i < b.N; i++ { ins.Field(0).SetString("name") ins.Field(1).SetString("ip") ins.Field(2).SetString("url") ins.Field(3).SetString("timeout") } } func BenchmarkReflect_FieldByNameSet(b *testing.B) { typ := reflect.TypeOf(Config{}) ins := reflect.New(typ).Elem() b.ResetTimer() for i := 0; i < b.N; i++ { ins.FieldByName("Name").SetString("name") ins.FieldByName("IP").SetString("ip") ins.FieldByName("URL").SetString("url") ins.FieldByName("Timeout").SetString("timeout") } } func BenchmarkReflect_FieldByNameCacheSet(b *testing.B) { typ := reflect.TypeOf(Config{}) cache := make(map[string]int) for i := 0; i < typ.NumField(); i++ { cache[typ.Field(i).Name] = i } ins := reflect.New(typ).Elem() b.ResetTimer() for i := 0; i < b.N; i++ { ins.Field(cache["Name"]).SetString("name") ins.Field(cache["IP"]).SetString("ip") ins.Field(cache["URL"]).SetString("url") ins.Field(cache["Timeout"]).SetString("timeout") } } ``` 壓測結果 ``` BenchmarkSet-8 1000000000 0.302 ns/op BenchmarkReflect_FieldSet-8 33913672 34.5 ns/op BenchmarkReflect_FieldByNameSet-8 3775234 316 ns/op BenchmarkReflect_FieldByNameCacheSet-8 14575906 78.2 ns/op ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看