@@ -30,6 +30,15 @@ import (
3030
3131func testMem () memory.Allocator { return memory .NewGoAllocator () }
3232
33+ func fieldValueByTag (v reflect.Value , tag string ) reflect.Value {
34+ for i := 0 ; i < v .NumField (); i ++ {
35+ if v .Type ().Field (i ).Tag .Get ("arrow" ) == tag {
36+ return v .Field (i )
37+ }
38+ }
39+ return reflect.Value {}
40+ }
41+
3342func TestToGo (t * testing.T ) {
3443 mem := testMem ()
3544
@@ -469,16 +478,8 @@ func TestRecordAtAny(t *testing.T) {
469478 require .NoError (t , err , "RecordAtAny(0)" )
470479 v := reflect .ValueOf (got )
471480 require .Equal (t , reflect .Struct , v .Kind ())
472- var nameField , scoreField reflect.Value
473- for i := 0 ; i < v .NumField (); i ++ {
474- tag := v .Type ().Field (i ).Tag .Get ("arrow" )
475- switch tag {
476- case "name" :
477- nameField = v .Field (i )
478- case "score" :
479- scoreField = v .Field (i )
480- }
481- }
481+ nameField := fieldValueByTag (v , "name" )
482+ scoreField := fieldValueByTag (v , "score" )
482483 require .True (t , nameField .IsValid (), "name field not found" )
483484 require .True (t , scoreField .IsValid (), "score field not found" )
484485 assert .Equal (t , "alice" , nameField .String ())
@@ -502,12 +503,7 @@ func TestRecordToAnySlice(t *testing.T) {
502503 for i , row := range got {
503504 v := reflect .ValueOf (row )
504505 require .Equal (t , reflect .Struct , v .Kind (), "row %d" , i )
505- var nameField reflect.Value
506- for fi := 0 ; fi < v .NumField (); fi ++ {
507- if v .Type ().Field (fi ).Tag .Get ("arrow" ) == "name" {
508- nameField = v .Field (fi )
509- }
510- }
506+ nameField := fieldValueByTag (v , "name" )
511507 assert .Equal (t , rows [i ].Name , nameField .String (), "row %d name" , i )
512508 }
513509}
@@ -534,17 +530,8 @@ func TestAtAnyComposite(t *testing.T) {
534530 v := reflect .ValueOf (got )
535531 require .Equal (t , reflect .Struct , v .Kind ())
536532
537- vt := v .Type ()
538- var idField , nameField reflect.Value
539- for i := 0 ; i < v .NumField (); i ++ {
540- tag := vt .Field (i ).Tag .Get ("arrow" )
541- switch tag {
542- case "id" :
543- idField = v .Field (i )
544- case "name" :
545- nameField = v .Field (i )
546- }
547- }
533+ idField := fieldValueByTag (v , "id" )
534+ nameField := fieldValueByTag (v , "name" )
548535 require .True (t , idField .IsValid (), "id field not found" )
549536 require .True (t , nameField .IsValid (), "name field not found" )
550537 assert .Equal (t , int64 (99 ), idField .Int ())
@@ -640,17 +627,9 @@ func TestToAnySliceStructArray(t *testing.T) {
640627 require .Equal (t , reflect .Struct , v .Kind (), "row %d" , i )
641628 require .Equal (t , 3 , v .NumField (), "row %d" , i )
642629
643- var id , label , score reflect.Value
644- for fi := 0 ; fi < v .NumField (); fi ++ {
645- switch v .Type ().Field (fi ).Tag .Get ("arrow" ) {
646- case "id" :
647- id = v .Field (fi )
648- case "label" :
649- label = v .Field (fi )
650- case "score" :
651- score = v .Field (fi )
652- }
653- }
630+ id := fieldValueByTag (v , "id" )
631+ label := fieldValueByTag (v , "label" )
632+ score := fieldValueByTag (v , "score" )
654633 require .True (t , id .IsValid (), "row %d: id field not found" , i )
655634 require .True (t , label .IsValid (), "row %d: label field not found" , i )
656635 require .True (t , score .IsValid (), "row %d: score field not found" , i )
0 commit comments