当前位置: 首页 > news >正文

更换网站首页模板怎么做网站建设需多少钱

更换网站首页模板怎么做,网站建设需多少钱,企业查询官网,建设网站应该加什么服务器最近在拆分一个旧服务#xff0c;需要从几十万行代码中#xff0c;按业务功能拆分出对应代码#xff0c;并部署新服务#xff1b;然而#xff0c;面对这种巨型服务#xff0c;代码调用错综复杂#xff0c;纯人力拆分需要耗费很多时间#xff1b;基于此#xff0c;这里…最近在拆分一个旧服务需要从几十万行代码中按业务功能拆分出对应代码并部署新服务然而面对这种巨型服务代码调用错综复杂纯人力拆分需要耗费很多时间基于此这里借助golang自带callgraph调用图能力帮我们找到需要拆出的代码 package mainimport (fmtio/ioutilpath/filepathsortstringsgithub.com/pkg/errorsgolang.org/x/tools/go/packagesgolang.org/x/tools/go/ssa/ssautilgolang.org/x/tools/go/callgraphgolang.org/x/tools/go/pointer )// getProjectUsedCall 获取项目使用中的调用方法 func getProjectUsedCall(projectPath string) ([]string, error) {projectModule, err : parseProjectModule(projectPath)if err ! nil {return nil, errors.Wrap(err, parseProjectModule fail)}log.Debugf(projectModule: %v, projectModule)callMap, err : parseProjectCallMap(projectPath)if err ! nil {return nil, errors.Wrap(err, parseProjectCallMap fail)}log.Debugf(callMap: %v, callMap)srcCall : fmt.Sprintf(%v.main, projectModule)isDeleteEdgeFunc : func(caller, callee string) bool {// 非本项目调用if !strings.Contains(caller, projectModule) || !strings.Contains(callee, projectModule) {return true}// 非初始化调用if isInitCall(caller) || isInitCall(callee) {return true}// 非自我调用if caller callee {return true}return false}// 过滤不需要的边for caller, callees : range callMap {for callee : range callees {if isDeleteEdgeFunc(caller, callee) {delete(callees, callee)}}if len(callees) 0 {delete(callMap, caller)}}// 广度搜索图for {srcCallees : callMap[srcCall]srcSize : len(srcCallees)for srcCallee : range srcCallees {for nextCallee : range callMap[srcCallee] {callMap[srcCall][nextCallee] true}}if srcSize len(callMap[srcCall]) {break}}// 调用源涉及到的所有方法var callees []stringfor c : range callMap[srcCall] {callees append(callees, c)}sort.Strings(callees)return callees, nil }// parseProjectCallMap 解析项目调用图 func parseProjectCallMap(projectPath string) (map[string]map[string]bool, error) {projectModule, err : parseProjectModule(projectPath)if err ! nil {return nil, errors.Wrap(err, parseProjectModule fail)}log.Debugf(projectModule: %v, projectModule)result, err : analyzeProject(projectPath)if err ! nil {return nil, errors.Wrap(err, analyzeProject fail)}log.Debugf(analyzeProject: %v, result)// 遍历调用链路var callMap make(map[string]map[string]bool)visitFunc : func(edge *callgraph.Edge) error {if edge nil {return nil}// 解析调用者和被调用者caller, callee, err : parseCallEdge(edge)if err ! nil {return errors.Wrap(err, parseCallEdge fail)}// 记录调用关系if callMap[caller] nil {callMap[caller] make(map[string]bool)}callMap[caller][callee] truereturn nil}err callgraph.GraphVisitEdges(result.CallGraph, visitFunc)if err ! nil {return nil, errors.Wrap(err, GraphVisitEdges fail)}return callMap, nil }func parseProjectModule(projectPath string) (string, error) {modFilename : filepath.Join(projectPath, go.mod)content, err : ioutil.ReadFile(modFilename)if err ! nil {return , errors.Wrap(err, ioutil.ReadFile fail)}lines : strings.Split(string(content), \n)module : strings.TrimPrefix(lines[0], module )module strings.TrimSpace(module)return module, nil }func analyzeProject(projectPath string) (*pointer.Result, error) {// 生成Go Packagespkgs, err : packages.Load(packages.Config{Mode: packages.LoadAllSyntax,Dir: projectPath,})if err ! nil {return nil, errors.Wrap(err, packages.Load fail)}log.Debugf(pkgs: %v, pkgs)// 生成ssa 构建编译prog, ssaPkgs : ssautil.AllPackages(pkgs, 0)prog.Build()log.Debugf(ssaPkgs: %v, ssaPkgs)// 使用pointer生成调用链路return pointer.Analyze(pointer.Config{Mains: ssaPkgs,BuildCallGraph: true,}) }func parseCallEdge(edge *callgraph.Edge) (string, string, error) {const callArrow --edgeStr : fmt.Sprintf(%v, edge)strArray : strings.Split(edgeStr, callArrow)if len(strArray) ! 2 {return , , fmt.Errorf(invalid format: %v, edgeStr)}callerNodeStr, calleeNodeStr : strArray[0], strArray[1]caller, callee : getCallRoute(callerNodeStr), getCallRoute(calleeNodeStr)return caller, callee, nil }func getCallRoute(nodeStr string) string {nodeStr strings.TrimSpace(nodeStr)if strings.Contains(nodeStr, :) {nodeStr nodeStr[strings.Index(nodeStr, :)1:]}nodeStr strings.ReplaceAll(nodeStr, *, )nodeStr strings.ReplaceAll(nodeStr, (, )nodeStr strings.ReplaceAll(nodeStr, ), )nodeStr strings.ReplaceAll(nodeStr, , )nodeStr strings.ReplaceAll(nodeStr, , )if strings.Contains(nodeStr, $) {nodeStr nodeStr[:strings.Index(nodeStr, $)]}if strings.Contains(nodeStr, #) {nodeStr nodeStr[:strings.Index(nodeStr, #)]}return strings.TrimSpace(nodeStr) }func isInitCall(call string) bool {return strings.HasSuffix(call, .init) }
http://wiki.neutronadmin.com/news/208264/

相关文章:

  • 做网站主要栏目内网站计算机培训机构哪个最好
  • 网站开发微信小程序需求量大吗丰都网站
  • 自己的服务器做网站动漫设计与制作实训报告
  • 海宁市住房和城乡规划建设局网站wordpress小工具失效
  • 泉州做网站优化怎么搭建自己的博客网站
  • 域名做网站名汇鑫网站建设
  • 政协 网站建设邵阳做网站
  • 蝙蝠做等级的网站网站内的地图导航怎么做的
  • txt电子书下载网站推荐常州制作企业网站
  • 深圳网站制作公司售后企业网络推广电话
  • 网络平台建站网站友情链接怎么添加
  • 购物网站线下推广方案wordpress ddos攻击
  • 汕头建站公司模板建设博客网站步骤
  • 泰安网站建设优化案例报告网站建设的功能需求文档
  • 网站外链隐形框架东营黄河口宠物信息网
  • wp网站做企业站好不好上海建站模板系统
  • 品牌官方网站建设需要什么网站建设与百度推广
  • 茂名建站公司黑色星期五wordpress
  • 做网站设计文字大小怎么设定网页制作怎么插视频
  • 外贸网站建设模板下载wordpress 轻博客 主题
  • 哪些是asp网站网站统计排名
  • 哪个网站可以做私单wordpress国内案例
  • 免费软件下载网站入口正能量甜品网站模板代码
  • 泰安三合一网站建设公司简述什么是网络营销
  • 调查网站赚钱在哪个网站可以自助建站
  • 榆林网站seo潜江资讯网找工作
  • 兼职做诚信网站认证网站建设 永灿 竞争
  • 剖析材料范文哪个网站做的好网站建设广告图片
  • 求职网站的建设方案网站建设项目说明书
  • 电子商务网站开发设计案例—易趣网电子商务网站软文营销网