yjp 11 ماه پیش
والد
کامیت
6c3e610b71
2فایلهای تغییر یافته به همراه13 افزوده شده و 7 حذف شده
  1. 4 4
      demo/sql_entity.go
  2. 9 3
      sql/parse_result.go

+ 4 - 4
demo/sql_entity.go

@@ -56,15 +56,15 @@ func main() {
 		panic(err)
 	}
 
-	classInfo, err := sql.ParseSqlResult[Class](result)
+	classInfoPtr, err := sql.ParseSqlResult[*Class](result)
 	if err != nil {
 		panic(err)
 	}
 
 	fmt.Println("Class Info:")
-	fmt.Printf("%#+v\n", classInfo)
+	fmt.Printf("%#+v\n", classInfoPtr)
 
-	classInfos, err := sql.ParseSqlResult[[]Class](result)
+	classInfos, err := sql.ParseSqlResult[[]*Class](result)
 	if err != nil {
 		panic(err)
 	}
@@ -85,7 +85,7 @@ func main() {
 		panic(err)
 	}
 
-	classInfo, err = sql.ParseSqlResult[Class](result)
+	classInfo, err := sql.ParseSqlResult[Class](result)
 	if err != nil {
 		panic(err)
 	}

+ 9 - 3
sql/parse_result.go

@@ -61,7 +61,7 @@ func ParseSqlResult[T any](input any) (T, error) {
 		if outputType.Kind() == reflect.Struct {
 			outputEntity = outputValue.Addr().Interface()
 		} else if outputType.Kind() == reflect.Ptr {
-			outputEntity = outputValue.Interface()
+			outputEntity = reflect.New(outputType.Elem()).Interface()
 		} else {
 			if outputType.Elem().Kind() == reflect.Struct {
 				outputEntity = reflect.New(outputType.Elem()).Interface()
@@ -82,8 +82,14 @@ func ParseSqlResult[T any](input any) (T, error) {
 			return zero, err
 		}
 
-		if outputType.Kind() == reflect.Slice {
-			outputValue = reflect.Append(outputValue, reflect.ValueOf(outputEntity).Elem())
+		if outputType.Kind() == reflect.Ptr {
+			outputValue = reflect.ValueOf(outputEntity)
+		} else if outputType.Kind() == reflect.Slice {
+			if outputType.Elem().Kind() == reflect.Struct {
+				outputValue = reflect.Append(outputValue, reflect.ValueOf(outputEntity).Elem())
+			} else {
+				outputValue = reflect.Append(outputValue, reflect.ValueOf(outputEntity))
+			}
 		}
 	}