Inflection 拐点

资源

Inflection

20220219该库状况

属性 内容
star 381
fork 59
famous used grom
dependence go 1.15 regexp
licence MIT

功能:

英文名词单数转复数,复数含义转单数

结构

CI 工具:wercker
wercker.yml

代码结构

文件简单基础,所有主逻辑都在infection中,且使用方式直接在readme中说明

#mermaid-svg-iAmVSRHIPz00z19K .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-iAmVSRHIPz00z19K .label text{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .node rect,#mermaid-svg-iAmVSRHIPz00z19K .node circle,#mermaid-svg-iAmVSRHIPz00z19K .node ellipse,#mermaid-svg-iAmVSRHIPz00z19K .node polygon,#mermaid-svg-iAmVSRHIPz00z19K .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-iAmVSRHIPz00z19K .node .label{text-align:center;fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .node.clickable{cursor:pointer}#mermaid-svg-iAmVSRHIPz00z19K .arrowheadPath{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-iAmVSRHIPz00z19K .flowchart-link{stroke:#333;fill:none}#mermaid-svg-iAmVSRHIPz00z19K .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-iAmVSRHIPz00z19K .edgeLabel rect{opacity:0.9}#mermaid-svg-iAmVSRHIPz00z19K .edgeLabel span{color:#333}#mermaid-svg-iAmVSRHIPz00z19K .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-iAmVSRHIPz00z19K .cluster text{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-iAmVSRHIPz00z19K .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-iAmVSRHIPz00z19K text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-iAmVSRHIPz00z19K .actor-line{stroke:grey}#mermaid-svg-iAmVSRHIPz00z19K .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-iAmVSRHIPz00z19K .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-iAmVSRHIPz00z19K #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-iAmVSRHIPz00z19K .sequenceNumber{fill:#fff}#mermaid-svg-iAmVSRHIPz00z19K #sequencenumber{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K #crosshead path{fill:#333;stroke:#333}#mermaid-svg-iAmVSRHIPz00z19K .messageText{fill:#333;stroke:#333}#mermaid-svg-iAmVSRHIPz00z19K .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-iAmVSRHIPz00z19K .labelText,#mermaid-svg-iAmVSRHIPz00z19K .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-iAmVSRHIPz00z19K .loopText,#mermaid-svg-iAmVSRHIPz00z19K .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-iAmVSRHIPz00z19K .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-iAmVSRHIPz00z19K .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-iAmVSRHIPz00z19K .noteText,#mermaid-svg-iAmVSRHIPz00z19K .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-iAmVSRHIPz00z19K .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-iAmVSRHIPz00z19K .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-iAmVSRHIPz00z19K .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-iAmVSRHIPz00z19K .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .section{stroke:none;opacity:0.2}#mermaid-svg-iAmVSRHIPz00z19K .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-iAmVSRHIPz00z19K .section2{fill:#fff400}#mermaid-svg-iAmVSRHIPz00z19K .section1,#mermaid-svg-iAmVSRHIPz00z19K .section3{fill:#fff;opacity:0.2}#mermaid-svg-iAmVSRHIPz00z19K .sectionTitle0{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .sectionTitle1{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .sectionTitle2{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .sectionTitle3{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-iAmVSRHIPz00z19K .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .grid path{stroke-width:0}#mermaid-svg-iAmVSRHIPz00z19K .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-iAmVSRHIPz00z19K .task{stroke-width:2}#mermaid-svg-iAmVSRHIPz00z19K .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .taskText:not([font-size]){font-size:11px}#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-iAmVSRHIPz00z19K .task.clickable{cursor:pointer}#mermaid-svg-iAmVSRHIPz00z19K .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-iAmVSRHIPz00z19K .taskText0,#mermaid-svg-iAmVSRHIPz00z19K .taskText1,#mermaid-svg-iAmVSRHIPz00z19K .taskText2,#mermaid-svg-iAmVSRHIPz00z19K .taskText3{fill:#fff}#mermaid-svg-iAmVSRHIPz00z19K .task0,#mermaid-svg-iAmVSRHIPz00z19K .task1,#mermaid-svg-iAmVSRHIPz00z19K .task2,#mermaid-svg-iAmVSRHIPz00z19K .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutside0,#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutside2{fill:#000}#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutside1,#mermaid-svg-iAmVSRHIPz00z19K .taskTextOutside3{fill:#000}#mermaid-svg-iAmVSRHIPz00z19K .active0,#mermaid-svg-iAmVSRHIPz00z19K .active1,#mermaid-svg-iAmVSRHIPz00z19K .active2,#mermaid-svg-iAmVSRHIPz00z19K .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-iAmVSRHIPz00z19K .activeText0,#mermaid-svg-iAmVSRHIPz00z19K .activeText1,#mermaid-svg-iAmVSRHIPz00z19K .activeText2,#mermaid-svg-iAmVSRHIPz00z19K .activeText3{fill:#000 !important}#mermaid-svg-iAmVSRHIPz00z19K .done0,#mermaid-svg-iAmVSRHIPz00z19K .done1,#mermaid-svg-iAmVSRHIPz00z19K .done2,#mermaid-svg-iAmVSRHIPz00z19K .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-iAmVSRHIPz00z19K .doneText0,#mermaid-svg-iAmVSRHIPz00z19K .doneText1,#mermaid-svg-iAmVSRHIPz00z19K .doneText2,#mermaid-svg-iAmVSRHIPz00z19K .doneText3{fill:#000 !important}#mermaid-svg-iAmVSRHIPz00z19K .crit0,#mermaid-svg-iAmVSRHIPz00z19K .crit1,#mermaid-svg-iAmVSRHIPz00z19K .crit2,#mermaid-svg-iAmVSRHIPz00z19K .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-iAmVSRHIPz00z19K .activeCrit0,#mermaid-svg-iAmVSRHIPz00z19K .activeCrit1,#mermaid-svg-iAmVSRHIPz00z19K .activeCrit2,#mermaid-svg-iAmVSRHIPz00z19K .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-iAmVSRHIPz00z19K .doneCrit0,#mermaid-svg-iAmVSRHIPz00z19K .doneCrit1,#mermaid-svg-iAmVSRHIPz00z19K .doneCrit2,#mermaid-svg-iAmVSRHIPz00z19K .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-iAmVSRHIPz00z19K .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-iAmVSRHIPz00z19K .milestoneText{font-style:italic}#mermaid-svg-iAmVSRHIPz00z19K .doneCritText0,#mermaid-svg-iAmVSRHIPz00z19K .doneCritText1,#mermaid-svg-iAmVSRHIPz00z19K .doneCritText2,#mermaid-svg-iAmVSRHIPz00z19K .doneCritText3{fill:#000 !important}#mermaid-svg-iAmVSRHIPz00z19K .activeCritText0,#mermaid-svg-iAmVSRHIPz00z19K .activeCritText1,#mermaid-svg-iAmVSRHIPz00z19K .activeCritText2,#mermaid-svg-iAmVSRHIPz00z19K .activeCritText3{fill:#000 !important}#mermaid-svg-iAmVSRHIPz00z19K .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-iAmVSRHIPz00z19K g.classGroup text .title{font-weight:bolder}#mermaid-svg-iAmVSRHIPz00z19K g.clickable{cursor:pointer}#mermaid-svg-iAmVSRHIPz00z19K g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-iAmVSRHIPz00z19K g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-iAmVSRHIPz00z19K .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-iAmVSRHIPz00z19K .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-iAmVSRHIPz00z19K .dashed-line{stroke-dasharray:3}#mermaid-svg-iAmVSRHIPz00z19K #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K .commit-id,#mermaid-svg-iAmVSRHIPz00z19K .commit-msg,#mermaid-svg-iAmVSRHIPz00z19K .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-iAmVSRHIPz00z19K g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-iAmVSRHIPz00z19K g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-iAmVSRHIPz00z19K g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-iAmVSRHIPz00z19K .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-iAmVSRHIPz00z19K .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-iAmVSRHIPz00z19K .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-iAmVSRHIPz00z19K .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-iAmVSRHIPz00z19K .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-iAmVSRHIPz00z19K .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-iAmVSRHIPz00z19K .edgeLabel text{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iAmVSRHIPz00z19K .node circle.state-start{fill:black;stroke:black}#mermaid-svg-iAmVSRHIPz00z19K .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-iAmVSRHIPz00z19K #statediagram-barbEnd{fill:#9370db}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-state .divider{stroke:#9370db}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-iAmVSRHIPz00z19K .note-edge{stroke-dasharray:5}#mermaid-svg-iAmVSRHIPz00z19K .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-iAmVSRHIPz00z19K .error-icon{fill:#522}#mermaid-svg-iAmVSRHIPz00z19K .error-text{fill:#522;stroke:#522}#mermaid-svg-iAmVSRHIPz00z19K .edge-thickness-normal{stroke-width:2px}#mermaid-svg-iAmVSRHIPz00z19K .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-iAmVSRHIPz00z19K .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-iAmVSRHIPz00z19K .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-iAmVSRHIPz00z19K .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-iAmVSRHIPz00z19K .marker{fill:#333}#mermaid-svg-iAmVSRHIPz00z19K .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-iAmVSRHIPz00z19K {color: rgba(0, 0, 0, 0.75);font: ;}

main_project_dir
wercker.yml(项目CI构建工具,单独构建使用)
inflection.go
inflection_test.go
Readme.md

结构简图

#mermaid-svg-QYwy3SeVeylMVww3 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-QYwy3SeVeylMVww3 .label text{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .node rect,#mermaid-svg-QYwy3SeVeylMVww3 .node circle,#mermaid-svg-QYwy3SeVeylMVww3 .node ellipse,#mermaid-svg-QYwy3SeVeylMVww3 .node polygon,#mermaid-svg-QYwy3SeVeylMVww3 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-QYwy3SeVeylMVww3 .node .label{text-align:center;fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .node.clickable{cursor:pointer}#mermaid-svg-QYwy3SeVeylMVww3 .arrowheadPath{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-QYwy3SeVeylMVww3 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-QYwy3SeVeylMVww3 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-QYwy3SeVeylMVww3 .edgeLabel rect{opacity:0.9}#mermaid-svg-QYwy3SeVeylMVww3 .edgeLabel span{color:#333}#mermaid-svg-QYwy3SeVeylMVww3 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-QYwy3SeVeylMVww3 .cluster text{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-QYwy3SeVeylMVww3 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-QYwy3SeVeylMVww3 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-QYwy3SeVeylMVww3 .actor-line{stroke:grey}#mermaid-svg-QYwy3SeVeylMVww3 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-QYwy3SeVeylMVww3 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-QYwy3SeVeylMVww3 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-QYwy3SeVeylMVww3 .sequenceNumber{fill:#fff}#mermaid-svg-QYwy3SeVeylMVww3 #sequencenumber{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-QYwy3SeVeylMVww3 .messageText{fill:#333;stroke:#333}#mermaid-svg-QYwy3SeVeylMVww3 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-QYwy3SeVeylMVww3 .labelText,#mermaid-svg-QYwy3SeVeylMVww3 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-QYwy3SeVeylMVww3 .loopText,#mermaid-svg-QYwy3SeVeylMVww3 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-QYwy3SeVeylMVww3 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-QYwy3SeVeylMVww3 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-QYwy3SeVeylMVww3 .noteText,#mermaid-svg-QYwy3SeVeylMVww3 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-QYwy3SeVeylMVww3 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-QYwy3SeVeylMVww3 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-QYwy3SeVeylMVww3 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-QYwy3SeVeylMVww3 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .section{stroke:none;opacity:0.2}#mermaid-svg-QYwy3SeVeylMVww3 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-QYwy3SeVeylMVww3 .section2{fill:#fff400}#mermaid-svg-QYwy3SeVeylMVww3 .section1,#mermaid-svg-QYwy3SeVeylMVww3 .section3{fill:#fff;opacity:0.2}#mermaid-svg-QYwy3SeVeylMVww3 .sectionTitle0{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .sectionTitle1{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .sectionTitle2{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .sectionTitle3{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-QYwy3SeVeylMVww3 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .grid path{stroke-width:0}#mermaid-svg-QYwy3SeVeylMVww3 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-QYwy3SeVeylMVww3 .task{stroke-width:2}#mermaid-svg-QYwy3SeVeylMVww3 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .taskText:not([font-size]){font-size:11px}#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-QYwy3SeVeylMVww3 .task.clickable{cursor:pointer}#mermaid-svg-QYwy3SeVeylMVww3 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-QYwy3SeVeylMVww3 .taskText0,#mermaid-svg-QYwy3SeVeylMVww3 .taskText1,#mermaid-svg-QYwy3SeVeylMVww3 .taskText2,#mermaid-svg-QYwy3SeVeylMVww3 .taskText3{fill:#fff}#mermaid-svg-QYwy3SeVeylMVww3 .task0,#mermaid-svg-QYwy3SeVeylMVww3 .task1,#mermaid-svg-QYwy3SeVeylMVww3 .task2,#mermaid-svg-QYwy3SeVeylMVww3 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutside0,#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutside2{fill:#000}#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutside1,#mermaid-svg-QYwy3SeVeylMVww3 .taskTextOutside3{fill:#000}#mermaid-svg-QYwy3SeVeylMVww3 .active0,#mermaid-svg-QYwy3SeVeylMVww3 .active1,#mermaid-svg-QYwy3SeVeylMVww3 .active2,#mermaid-svg-QYwy3SeVeylMVww3 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-QYwy3SeVeylMVww3 .activeText0,#mermaid-svg-QYwy3SeVeylMVww3 .activeText1,#mermaid-svg-QYwy3SeVeylMVww3 .activeText2,#mermaid-svg-QYwy3SeVeylMVww3 .activeText3{fill:#000 !important}#mermaid-svg-QYwy3SeVeylMVww3 .done0,#mermaid-svg-QYwy3SeVeylMVww3 .done1,#mermaid-svg-QYwy3SeVeylMVww3 .done2,#mermaid-svg-QYwy3SeVeylMVww3 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-QYwy3SeVeylMVww3 .doneText0,#mermaid-svg-QYwy3SeVeylMVww3 .doneText1,#mermaid-svg-QYwy3SeVeylMVww3 .doneText2,#mermaid-svg-QYwy3SeVeylMVww3 .doneText3{fill:#000 !important}#mermaid-svg-QYwy3SeVeylMVww3 .crit0,#mermaid-svg-QYwy3SeVeylMVww3 .crit1,#mermaid-svg-QYwy3SeVeylMVww3 .crit2,#mermaid-svg-QYwy3SeVeylMVww3 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-QYwy3SeVeylMVww3 .activeCrit0,#mermaid-svg-QYwy3SeVeylMVww3 .activeCrit1,#mermaid-svg-QYwy3SeVeylMVww3 .activeCrit2,#mermaid-svg-QYwy3SeVeylMVww3 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-QYwy3SeVeylMVww3 .doneCrit0,#mermaid-svg-QYwy3SeVeylMVww3 .doneCrit1,#mermaid-svg-QYwy3SeVeylMVww3 .doneCrit2,#mermaid-svg-QYwy3SeVeylMVww3 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-QYwy3SeVeylMVww3 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-QYwy3SeVeylMVww3 .milestoneText{font-style:italic}#mermaid-svg-QYwy3SeVeylMVww3 .doneCritText0,#mermaid-svg-QYwy3SeVeylMVww3 .doneCritText1,#mermaid-svg-QYwy3SeVeylMVww3 .doneCritText2,#mermaid-svg-QYwy3SeVeylMVww3 .doneCritText3{fill:#000 !important}#mermaid-svg-QYwy3SeVeylMVww3 .activeCritText0,#mermaid-svg-QYwy3SeVeylMVww3 .activeCritText1,#mermaid-svg-QYwy3SeVeylMVww3 .activeCritText2,#mermaid-svg-QYwy3SeVeylMVww3 .activeCritText3{fill:#000 !important}#mermaid-svg-QYwy3SeVeylMVww3 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-QYwy3SeVeylMVww3 g.classGroup text .title{font-weight:bolder}#mermaid-svg-QYwy3SeVeylMVww3 g.clickable{cursor:pointer}#mermaid-svg-QYwy3SeVeylMVww3 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-QYwy3SeVeylMVww3 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-QYwy3SeVeylMVww3 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-QYwy3SeVeylMVww3 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-QYwy3SeVeylMVww3 .dashed-line{stroke-dasharray:3}#mermaid-svg-QYwy3SeVeylMVww3 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 .commit-id,#mermaid-svg-QYwy3SeVeylMVww3 .commit-msg,#mermaid-svg-QYwy3SeVeylMVww3 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-QYwy3SeVeylMVww3 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-QYwy3SeVeylMVww3 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-QYwy3SeVeylMVww3 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-QYwy3SeVeylMVww3 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-QYwy3SeVeylMVww3 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-QYwy3SeVeylMVww3 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-QYwy3SeVeylMVww3 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-QYwy3SeVeylMVww3 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-QYwy3SeVeylMVww3 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-QYwy3SeVeylMVww3 .edgeLabel text{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QYwy3SeVeylMVww3 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-QYwy3SeVeylMVww3 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-QYwy3SeVeylMVww3 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-QYwy3SeVeylMVww3 .note-edge{stroke-dasharray:5}#mermaid-svg-QYwy3SeVeylMVww3 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-QYwy3SeVeylMVww3 .error-icon{fill:#522}#mermaid-svg-QYwy3SeVeylMVww3 .error-text{fill:#522;stroke:#522}#mermaid-svg-QYwy3SeVeylMVww3 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-QYwy3SeVeylMVww3 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-QYwy3SeVeylMVww3 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-QYwy3SeVeylMVww3 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-QYwy3SeVeylMVww3 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-QYwy3SeVeylMVww3 .marker{fill:#333}#mermaid-svg-QYwy3SeVeylMVww3 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-QYwy3SeVeylMVww3 {color: rgba(0, 0, 0, 0.75);font: ;}

单数调用
复数调用
初始化按代码中的规则
初始化正则处理函数数组
通过函数增加规则
遍历单数正则树并返回
遍历复数正则树并返回

数据结构

inflection中先定义了数据结构和规则,直接写死在代码中了,数据如下

// 项目包含 regexp 实例
type inflection struct {regexp  *regexp.Regexpreplace string
}// 以下定义了规则复数和单数规则和非规则的数据类型,分别代表正则要找的内容(比如复数),正则的替换内容(比如单数)
type Regular struct {find    stringreplace string
}type Irregular struct {singular stringplural   string
}// 定义了单数规则和非规则的数据类型相应数组,单数和复数的映射关系被定义
// RegularSlice is a slice of Regular inflections
type RegularSlice []Regular// IrregularSlice is a slice of Irregular inflections
type IrregularSlice []Irregular// 正规转复数的查找替换组合定义
var pluralInflections = RegularSlice{{"([a-z])$", "${1}s"}, // 基础复数形式{"s$", "s"},{"^(ax|test)is$", "${1}es"},{"(octop|vir)us$", "${1}i"},{"(octop|vir)i$", "${1}i"},{"(alias|status|campus)$", "${1}es"},{"(bu)s$", "${1}ses"},{"(buffal|tomat)o$", "${1}oes"},{"([ti])um$", "${1}a"},{"([ti])a$", "${1}a"},{"sis$", "ses"},{"(?:([^f])fe|([lr])f)$", "${1}${2}ves"},{"(hive)$", "${1}s"},{"([^aeiouy]|qu)y$", "${1}ies"},{"(x|ch|ss|sh)$", "${1}es"},{"(matr|vert|ind)(?:ix|ex)$", "${1}ices"},{"^(m|l)ouse$", "${1}ice"},{"^(m|l)ice$", "${1}ice"},{"^(ox)$", "${1}en"},{"^(oxen)$", "${1}"},{"(quiz)$", "${1}zes"},{"(drive)$", "${1}s"},
}
// 正规转单数
var singularInflections = RegularSlice{{"s$", ""},{"(ss)$", "${1}"},{"(n)ews$", "${1}ews"},{"([ti])a$", "${1}um"},{"((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$", "${1}sis"},{"(^analy)(sis|ses)$", "${1}sis"},{"([^f])ves$", "${1}fe"},{"(hive)s$", "${1}"},{"(tive)s$", "${1}"},{"([lr])ves$", "${1}f"},{"([^aeiouy]|qu)ies$", "${1}y"},{"(s)eries$", "${1}eries"},{"(m)ovies$", "${1}ovie"},{"(c)ookies$", "${1}ookie"},{"(x|ch|ss|sh)es$", "${1}"},{"^(m|l)ice$", "${1}ouse"},{"(bus|campus)(es)?$", "${1}"},{"(o)es$", "${1}"},{"(shoe)s$", "${1}"},{"(cris|test)(is|es)$", "${1}is"},{"^(a)x[ie]s$", "${1}xis"},{"(octop|vir)(us|i)$", "${1}us"},{"(alias|status)(es)?$", "${1}"},{"^(ox)en", "${1}"},{"(vert|ind)ices$", "${1}ex"},{"(matr)ices$", "${1}ix"},{"(quiz)zes$", "${1}"},{"(database)s$", "${1}"},{"(drive)s$", "${1}"},
}
// 特殊规则
var irregularInflections = IrregularSlice{{"person", "people"},{"man", "men"},{"child", "children"},{"sex", "sexes"},{"move", "moves"},{"ombie", "ombies"},{"goose", "geese"},{"foot", "feet"},{"moose", "moose"},{"tooth", "teeth"},
}// 不做更改内容
var uncountableInflections = []string{"equipment", "information", "rice", "money", "species", "series", "fish", "sheep", "jeans", "police", "milk", "salt", "time", "water", "paper", "food", "art", "cash", "music", "help", "luck", "oil", "progress", "rain", "research", "shopping", "software", "traffic"}

核心函数 compile

compile,主要是多个大循环,按优先级

var compiledPluralMaps []inflection
var compiledSingularMaps []inflection
// 缓存的处理映射树初始化,直接用于内部全局func compile() {// 基于上文的变换数据构建正则梳理slice,存储于列表映射树中,有优先级先后compiledPluralMaps, compiledSingularMaps = nil, nilfor _, uncountable := range uncountableInflections {inf := inflection{regexp:  regexp.MustCompile("^(?i)(" + uncountable + ")$"),replace: "${1}",}compiledPluralMaps = append(compiledPluralMaps, inf)compiledSingularMaps = append(compiledSingularMaps, inf)}for _, value := range irregularInflections {infs := []inflection{{regexp: regexp.MustCompile(strings.ToUpper(value.singular) + "$"), replace: strings.ToUpper(value.plural)},{regexp: regexp.MustCompile(strings.Title(value.singular) + "$"), replace: strings.Title(value.plural)},{regexp: regexp.MustCompile(value.singular + "$"), replace: value.plural},}compiledPluralMaps = append(compiledPluralMaps, infs...)}for _, value := range irregularInflections {infs := []inflection{{regexp: regexp.MustCompile(strings.ToUpper(value.plural) + "$"), replace: strings.ToUpper(value.singular)},{regexp: regexp.MustCompile(strings.Title(value.plural) + "$"), replace: strings.Title(value.singular)},{regexp: regexp.MustCompile(value.plural + "$"), replace: value.singular},}compiledSingularMaps = append(compiledSingularMaps, infs...)}for i := len(pluralInflections) - 1; i >= 0; i-- {value := pluralInflections[i]infs := []inflection{{regexp: regexp.MustCompile(strings.ToUpper(value.find)), replace: strings.ToUpper(value.replace)},{regexp: regexp.MustCompile(value.find), replace: value.replace},{regexp: regexp.MustCompile("(?i)" + value.find), replace: value.replace},}compiledPluralMaps = append(compiledPluralMaps, infs...)}for i := len(singularInflections) - 1; i >= 0; i-- {value := singularInflections[i]infs := []inflection{{regexp: regexp.MustCompile(strings.ToUpper(value.find)), replace: strings.ToUpper(value.replace)},{regexp: regexp.MustCompile(value.find), replace: value.replace},{regexp: regexp.MustCompile("(?i)" + value.find), replace: value.replace},}compiledSingularMaps = append(compiledSingularMaps, infs...)}
}func init() {// 初始化时即可编译好compile()
}

用户自定义处理

其中也提供了,中途相修改数据的方法,都是修改全局数据后,重新完全编译

// AddPlural adds a plural inflection
func AddPlural(find, replace string) {pluralInflections = append(pluralInflections, Regular{find, replace})compile()
}// AddSingular adds a singular inflection
func AddSingular(find, replace string) {singularInflections = append(singularInflections, Regular{find, replace})compile()
}// AddIrregular adds an irregular inflection
func AddIrregular(singular, plural string) {irregularInflections = append(irregularInflections, Irregular{singular, plural})compile()
}// AddUncountable adds an uncountable inflection
func AddUncountable(values ...string) {uncountableInflections = append(uncountableInflections, values...)compile()
}// GetPlural retrieves the plural inflection values
func GetPlural() RegularSlice {plurals := make(RegularSlice, len(pluralInflections))copy(plurals, pluralInflections)return plurals

单复数变化使用方式

直接通过构建的匹配正则树,如果匹配上就做对应转换来实现,遍历compile生成的正则数组,成功则返回对应结果,否则返回原字符串。

// Plural converts a word to its plural form
func Plural(str string) string {for _, inflection := range compiledPluralMaps {if inflection.regexp.MatchString(str) {return inflection.regexp.ReplaceAllString(str, inflection.replace)}}return str
}// Singular converts a word to its singular form
func Singular(str string) string {for _, inflection := range compiledSingularMaps {if inflection.regexp.MatchString(str) {return inflection.regexp.ReplaceAllString(str, inflection.replace)}}return str
}

小思考

单复数规则实际上先后关系影响很大,所以作者直接使用了每次规则新增都完整编译,这样效率低,但至少不会错。

规则直接写在代码里也十分简洁。

go 源码工具解析-英文单复数变化 Inflection相关推荐

  1. 【笔记-vue】《imooc-vue.js高仿饿了么》、《imooc-vue 音乐app》、《imooc-vue.js源码全方位解析》

    20170709 - 20171128:<imooc-vue.js高仿饿了么> 一.第一章 课程简介 1-1课程简介 1.需求分析-脚手架工具-数据mock-架构设计-代码编写-自测-编译 ...

  2. 万字长文|Hashtable源码深度解析以及与HashMap的区别

    基于JDK1.8对Java中的Hashtable集合的源码进行了深度解析,包括各种方法.扩容机制.哈希算法.遍历方法等方法的底层实现,最后给出了Hashtable和HashMap的详细对比以及使用建议 ...

  3. 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择

    前言 参见上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮叨下核范数和规则项参数选择.知识有限,以下都是我一些浅显的看法,如果理解存在错误,希望大家不吝指正.谢谢. 机器学习算法源码全解析( ...

  4. Jdk1.8 JUC源码增量解析(1)-atomic-Striped64

    转载自  Jdk1.8 JUC源码增量解析(1)-atomic-Striped64 功能简介: Striped64是jdk1.8提供的用于支持如Long累加器,Double累加器这样机制的基础类. S ...

  5. Java LockSupport以及park、unpark方法源码深度解析

    介绍了JUC中的LockSupport阻塞工具以及park.unpark方法的底层原理,从Java层面深入至JVM层面. 文章目录 1 LockSupport的概述 2 LockSupport的特征和 ...

  6. PSINS源码test_SINS_DR解析

    PSINS源码test_SINS_DR解析 前言 源码解析 整体介绍 对源码参数的更改 test_SINS_DR脚本 glvf函数 drinit函数 odsimu函数 RMRN函数 imuerrset ...

  7. 80个python项目下载_80个Python经典资料(教程+源码+工具)汇总——下载目录

    小弟根据资料的热度和好评收集了80个Python资料,分享给Python开发的同学.内容包括1个Python专题.66个学习资料.7套Python源码和6个相关软件.附件较多,无法一一分享,只能为大家 ...

  8. 《Spring源码深度解析 郝佳 第2版》AOP

    往期博客 <Spring源码深度解析 郝佳 第2版>容器的基本实现与XML文件的加载 <Spring源码深度解析 郝佳 第2版>XML标签的解析 <Spring源码深度解 ...

  9. 《Spring源码深度解析 郝佳 第2版》ApplicationContext

    往期博客: <Spring源码深度解析 郝佳 第2版>容器的基本实现与XML文件的加载 <Spring源码深度解析 郝佳 第2版>XML标签的解析 <Spring源码深度 ...

最新文章

  1. R EnhancedVolcano 绘制火山图
  2. 移动测试之CheckList
  3. docker安装测试及问题解决
  4. IDEA开发vue.js卡死问题
  5. Android之SharedPreferences 存储复杂对象
  6. cad快捷键文件路径_办公格式转太难不会看这里!CAD、PDF、Word、Excel、TXT教你玩转...
  7. Yii和ThinkPHP对比心得
  8. jQuery选择器经典案例
  9. 处于风口浪尖的区块链和人工智能,联手在这些领域落地有声
  10. 当前可用的喜马拉雅专辑下载器
  11. mount: unknown filesystem type
  12. PC微信多开,超简单
  13. 2020年中国SCADA行业产值、市场规模及竞争格局分析[图]
  14. IE和标准下有哪些兼容性的写法
  15. java 飞机 源码_Java 飞机游戏源码(带音乐)
  16. 西安交通大学计算机组成原理实验,西安交通大学计算机组成原理专题实验(上)第一次实验报告.pdf...
  17. 帮你抢小游戏流量红利——360小游戏接入指南
  18. windows录屏html文件,windows录屏怎么录?还有其他方法吗?
  19. 实时操作系统和分时操作系统
  20. PTA 互评成绩(sort函数)

热门文章

  1. 实用新型申请的时间、流程、费用是怎样的?
  2. mybatis自动识别数据库关键字
  3. libstdc++.so.6库环境配置
  4. 利用OATS技术来设计Test Case
  5. 计算机公式above,word表格中求和公式是SUM(ABOVE).请问:括号中ABOVE是什么意思呢?
  6. 惠州学院计算机学院2019,2019惠州学院专业排名
  7. 计算机电源负载能力差,电脑电源问题:电脑电源负载能力差的原因及解决方法...
  8. python建立空矩阵_创建空矩阵Python
  9. 让学习成为生活的一部分--彭小六
  10. 小区AO 各地小区边界下载