package service import ( "go/ast" ) func handleValueSpec(spec ast.Spec) string { s := spec.(*ast.ValueSpec) code := "" code += handleValueSpecType(s.Type) code += " " code += handleValueSpecNames(s.Names) if s.Values != nil { code += " = " code += handleValueSpecValues(s.Values) } return code } func handleValueSpecNames(names []*ast.Ident) string { code := "" for _, name := range names { code += handleIdent(name) } return code } func handleValueSpecType(expr ast.Expr) string { code := "" switch t := expr.(type) { case *ast.SelectorExpr: code += handleSelectorExpr(t) case *ast.Ident: code += handleIdent(t) } return code } func handleValueSpecValues(values []ast.Expr) string { code := "" for _, value := range values { switch v := value.(type) { case *ast.BasicLit: code += handleBasicLit(v) case *ast.BinaryExpr: code += handleBinaryExpr(v) case *ast.SelectorExpr: code += handleSelectorExpr(value) case *ast.CallExpr: code += handleCallExpr(v) } } return code }