From 77c9e06b39cc1a406aec6076fca1c6905b2ba90a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Wed, 12 Feb 2025 22:20:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate.go | 75 ++++++++----------------------------------------- struct_field.go | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 64 deletions(-) create mode 100644 struct_field.go diff --git a/generate.go b/generate.go index e23cecd..00be0b9 100644 --- a/generate.go +++ b/generate.go @@ -324,28 +324,28 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in inputType.Field(i).Type.Kind() == reflect.Slice { if convertType := g.realBaseType2SwaggerType(inputType.Field(i).Type.String()); !strings.HasPrefix(convertType, "[]") && convertType != inputType.Field(i).Type.Kind().String() { // 针对基础类型指针 - g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{ + g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{ Type: g.realBaseType2SwaggerType(convertType), Format: inputType.Field(i).Type.String(), - Default: g.getDefaultValue(inputType.Field(i)), - Description: g.getParamDesc(inputType.Field(i)), + Default: ParseStructField.GetDefaultValue(inputType.Field(i)), + Description: ParseStructField.GetParamDesc(inputType.Field(i)), } continue } if inputType.Field(i).Type.Kind() == reflect.Struct || inputType.Field(i).Type.Kind() == reflect.Map { - g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{ + g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{ Type: consts.SwaggerDataTypeObject, Format: inputType.Field(i).Type.String(), - Description: g.getParamDesc(inputType.Field(i)), + Description: ParseStructField.GetParamDesc(inputType.Field(i)), Properties: map[string]*define.Property{}, } } else if inputType.Field(i).Type.Kind() == reflect.Array || inputType.Field(i).Type.Kind() == reflect.Slice { - g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{ + g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{ Type: consts.SwaggerDataTypeArray, Format: inputType.Field(i).Type.String(), - Description: g.getParamDesc(inputType.Field(i)), + Description: ParseStructField.GetParamDesc(inputType.Field(i)), Items: &define.PropertyXOf{ Ref: g.parseSliceItem(schemaName, inputType.Field(i).Type), }, @@ -354,15 +354,15 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in } else if inputType.Field(i).Type.Kind() == reflect.Ptr { } else { - g.AddComponentsSchema(schemaName, g.getParamName(inputType.Field(i)), inputType.Field(i).Type) + g.AddComponentsSchema(schemaName, ParseStructField.GetParamName(inputType.Field(i)), inputType.Field(i).Type) } } else { - g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{ + g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{ Type: g.realBaseType2SwaggerType(inputType.Field(i).Type.String()), Format: inputType.Field(i).Type.String(), - Default: g.getDefaultValue(inputType.Field(i)), - Description: g.getParamDesc(inputType.Field(i)), + Default: ParseStructField.GetDefaultValue(inputType.Field(i)), + Description: ParseStructField.GetParamDesc(inputType.Field(i)), } } } @@ -467,56 +467,3 @@ func (g *Generate) realType2SwaggerType(realType string) string { } return g.realBaseType2SwaggerType(realType) } - -// getParamName 获取参数名称 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:58 2025/2/11 -func (g *Generate) getParamName(structField reflect.StructField) string { - paramNameTagList := []string{ - define.TagJson, define.TagForm, - define.TagXml, define.TagYaml, - define.TagYml, - } - for _, tag := range paramNameTagList { - tagVal := structField.Tag.Get(tag) - if tagVal != "" { - return tagVal - } - } - // 未设置相关字段, 则字段名即为参数名 - return structField.Name -} - -// getParamDesc ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 22:01 2025/2/11 -func (g *Generate) getParamDesc(structField reflect.StructField) string { - descTagList := []string{define.TagDesc, define.TagDescription} - for _, tag := range descTagList { - tagVal := structField.Tag.Get(tag) - if tagVal != "" { - return tagVal - } - } - // 没有显示的设置参数描述, 则使用参数名作为参数描述 - return g.getParamName(structField) -} - -// getDefaultValue 获取默认值 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 22:05 2025/2/11 -func (g *Generate) getDefaultValue(structField reflect.StructField) string { - defaultTagList := []string{define.TagD, define.TagDefault} - for _, tag := range defaultTagList { - if tagVal, exist := structField.Tag.Lookup(tag); exist { - return tagVal - } - } - return "" -} diff --git a/struct_field.go b/struct_field.go new file mode 100644 index 0000000..e672641 --- /dev/null +++ b/struct_field.go @@ -0,0 +1,73 @@ +// Package api_doc ... +// +// Description : api_doc ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-02-12 22:15 +package api_doc + +import ( + "git.zhangdeman.cn/gateway/api-doc/define" + "reflect" +) + +var ( + ParseStructField = parseStructField{} +) + +type parseStructField struct { +} + +// GetParamName 获取参数名称 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:58 2025/2/11 +func (psf parseStructField) GetParamName(structField reflect.StructField) string { + paramNameTagList := []string{ + define.TagJson, define.TagForm, + define.TagXml, define.TagYaml, + define.TagYml, + } + for _, tag := range paramNameTagList { + tagVal := structField.Tag.Get(tag) + if tagVal != "" { + return tagVal + } + } + // 未设置相关字段, 则字段名即为参数名 + return structField.Name +} + +// GetParamDesc ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 22:01 2025/2/11 +func (psf parseStructField) GetParamDesc(structField reflect.StructField) string { + descTagList := []string{define.TagDesc, define.TagDescription} + for _, tag := range descTagList { + tagVal := structField.Tag.Get(tag) + if tagVal != "" { + return tagVal + } + } + // 没有显示的设置参数描述, 则使用参数名作为参数描述 + return psf.GetParamName(structField) +} + +// GetDefaultValue 获取默认值 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 22:05 2025/2/11 +func (psf parseStructField) GetDefaultValue(structField reflect.StructField) string { + defaultTagList := []string{define.TagD, define.TagDefault} + for _, tag := range defaultTagList { + if tagVal, exist := structField.Tag.Lookup(tag); exist { + return tagVal + } + } + return "" +}