Go 实现 自动检索 API 错误码代码行 并 打印成文档,例 markDown
发布时间:2020-12-16 19:35:22 所属栏目:大数据 来源:网络整理
导读:作者:林冠宏 / 指尖下的幽灵 掘金: 博客: GitHub : 腾讯云专栏: 如果你是一个 后端Server程序 开发人员。你应该知道,在你写完 API 之后,是需要给 客户端 的同学提供 调用 文档的。 例如下面一个 api handler , 创建一个用户 。 func HandleCreateUse
如果你是一个 例如下面一个 func HandleCreateUser(w http.ResponseWriter,r *http.Request) map[string]interface{} { if r.Body == nil { return util.GetCommonErr(23,"create user req body is fucking null?") } .... .... return util.GetCommonSuccess("success") } 上面有一行 util.GetCommonErr(23,"create user req body is fucking null?") 假设我们要写成
手动 写完了。
如果有 一个帮你自动检索并生成API输出错误信息文档的
|
含义 | 提示 |
---|---|
markDown 风格的生成
接口
type IErrorDocPrinter interface { FindLines(printer *ErrorDocPrinter,reader *bufio.Reader,fileName,currentSuffix string,handleLine func(line string)) []string BuildACell(printer ErrorDocPrinter,columns,size int,prefixName,param string) string ResultLine(line string) EndOfAFile(printer ErrorDocPrinter,aFileRetLines []string) EndOfAllFile(printer ErrorDocPrinter,allRetLines []string) }
func (p MarkDownErrorDocPrinter) FindLines(
printer *ErrorDocPrinter,handleLine func(line string)) []string {
// 正则匹配 todo
var lines []string
printer.currentLineNum = 0
for {
byt,_,err := reader.ReadLine()
if err != nil {
// 读完一个文件
break
}
line := string(byt)
// 排除注释
printer.currentLineNum++
if startWith(line,"//") {
continue
}
if startWith(line,"/*") {
continue
}
if startWith(line,"*") {
continue
}
for _,value := range printer.TargetErrorFuncName {
if strings.Contains(line,value) {
// hit,准备生成
handleLine(line)
lines = append(lines,line)
}
}
}
return lines
}
func (p MarkDownErrorDocPrinter) BuildACell(
printer ErrorDocPrinter,param string) string {
/**
| Name | Academy | score |
| - | - | - |
| Harry Potter | Gryffindor| 90 |
| Hermione Granger | Gryffindor | 100 |
| Draco Malfoy | Slytherin | 90 |
*/
if columns == 0 {
code,err := strconv.ParseInt(param,10,64)
if err == nil {
codeArr = append(codeArr,code)
}
return "|" + param
}
count := tipsMap[param]
if columns == 1 {
// 保存提示列
if count != 0 {
count++
diffMap[fmt.Sprintf("param: -- %s -- times:%d",param,count-1)] =
fmt.Sprintf(" 与 %s 的第 %d 行提示重复",printer.currentFileName,printer.currentLineNum)
}else{
count = 1
}
tipsMap[param] = count
}
if columns == size - 1 {
return "|" + param + "|"
}
// 找出提示一样,但是 code 不一样的
return "|" + param
}
func quickSort(arr *[]int64,left,right int) {
if arr == nil {
return
}
if right == len(*arr) {
right--
}
if left < 0 || left >= len(*arr) {
return
}
hight := right
low := left
base := (*arr)[left]
if low < hight {
for ;low < hight; {
for ;low < hight && base <= (*arr)[hight]; {
hight--
break
}
(*arr)[low] = (*arr)[hight]
for ;low < hight && base >= (*arr)[low]; {
low++
break
}
(*arr)[hight] = (*arr)[low]
}
(*arr)[low] = base
quickSort(arr,low-1)
quickSort(arr,low+1,right)
}
}
quickSort(&codeArr,len(codeArr))
codeArrSize := len(codeArr)
for i:=0; i// 生成文件
fileName := "errorInfo.md"
file,err := os.Create(fileName)
defer file.Close()
if err!=nil {
fmt.Println(err)
}
for _,line := range final {
fmt.Println(line)
file.WriteString(line+"n")
}
<h2 id="如果编程不是为了让复杂的问题简单化那和机械学习有什么区别">如果编程不是为了让复杂的问题简单化,那和机械学习有什么区别?
func (p MarkDownErrorDocPrinter) BuildACell( printer ErrorDocPrinter,param string) string { /** | Name | Academy | score | | - | - | - | | Harry Potter | Gryffindor| 90 | | Hermione Granger | Gryffindor | 100 | | Draco Malfoy | Slytherin | 90 | */ if columns == 0 { code,err := strconv.ParseInt(param,10,64) if err == nil { codeArr = append(codeArr,code) } return "|" + param } count := tipsMap[param] if columns == 1 { // 保存提示列 if count != 0 { count++ diffMap[fmt.Sprintf("param: -- %s -- times:%d",param,count-1)] = fmt.Sprintf(" 与 %s 的第 %d 行提示重复",printer.currentFileName,printer.currentLineNum) }else{ count = 1 } tipsMap[param] = count } if columns == size - 1 { return "|" + param + "|" } // 找出提示一样,但是 code 不一样的 return "|" + param }
func quickSort(arr *[]int64,left,right int) {
if arr == nil {
return
}
if right == len(*arr) {
right--
}
if left < 0 || left >= len(*arr) {
return
}
hight := right
low := left
base := (*arr)[left]
if low < hight {
for ;low < hight; {
for ;low < hight && base <= (*arr)[hight]; {
hight--
break
}
(*arr)[low] = (*arr)[hight]
for ;low < hight && base >= (*arr)[low]; {
low++
break
}
(*arr)[hight] = (*arr)[low]
}
(*arr)[low] = base
quickSort(arr,low-1)
quickSort(arr,low+1,right)
}
}
quickSort(&codeArr,len(codeArr))
codeArrSize := len(codeArr)
for i:=0; i// 生成文件
fileName := "errorInfo.md"
file,err := os.Create(fileName)
defer file.Close()
if err!=nil {
fmt.Println(err)
}
for _,line := range final {
fmt.Println(line)
file.WriteString(line+"n")
}
<h2 id="如果编程不是为了让复杂的问题简单化那和机械学习有什么区别">如果编程不是为了让复杂的问题简单化,那和机械学习有什么区别?
quickSort(&codeArr,len(codeArr)) codeArrSize := len(codeArr) for i:=0; i// 生成文件
fileName := "errorInfo.md"
file,err := os.Create(fileName)
defer file.Close()
if err!=nil {
fmt.Println(err)
}
for _,line := range final {
fmt.Println(line)
file.WriteString(line+"n")
}
<h2 id="如果编程不是为了让复杂的问题简单化那和机械学习有什么区别">如果编程不是为了让复杂的问题简单化,那和机械学习有什么区别?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!