mycobra用於處理簡單的子命令系統(簡單的,不能帶很多引數的)。其中有乙個命令樹,每個節點的子節點就是子命令,每個節點儲存自己的命令。
type command struct設計:
type command struct
就是一棵樹。
addcommand函式:
func
(c command)
addcommand
(newcom *command)
newcom.father=
&c; c.sons=
(c.sons,newcom)
}
commandpath函式
func
(c command)
commandpath()
string
var now command;
var path [
]string
; now=c;
path=
(path,now.cmds)
;for
;(now.father)
!=&root;
now=
*now.father;
path=
(path,now.cmds);}
ret:="";
for i:=
len(path)-1
;i>=
0;i=i-1}
return ret;
}
返回當前節點的命令路徑,路徑通常用root -> cmd1 -->cmd2 -->… -> current cmd 的形式列出。查詢原理就是不斷地訪問父命令,迭代,直到訪問到根,根的father就是自己。並且將一路上路過的節點的命令記錄下來,再倒敘輸出。
excutec函式
func
(c command)
excutec()
fmt.
println
(string
(out)
)}
執行當前命令。
exec.command會在path系統變數中尋找指定的二進位制檔案,並且執行,這裡將輸出指向了cmd.combineoutput,然後再一起輸出它,這樣我們就能看到輸出了。
newcommand函式
func
newcommand
(cmds string
) command
建立乙個新的command,可以新增在樹中
此外還有:
init函式:初始化乙個樹,在每次呼叫mycobra函式前需要先使用。
getroot函式:獲得這棵樹的根節點。
mycobra_test可以這樣寫:
package mycobra;
import
("testing"
)func
testinit
(t *testing.t)
var c2=
newcommand
("hello2");
c1.addcommand
(&c2);if
(c2.
commandpath()
!="root -> hello -> hello2"
)var c3=
newcommand
("hello3");
mroot.
addcommand
(&c3);if
(c3.
commandpath()
!="root -> hello3"
) c1.
excutec()
; c2.
excutec()
; c3.
excutec()
;}
建立了乙個有四個節點的樹,root,c1,c2,c3,對應不同的helloworld輸出。
將c1,c2,c3三個命令command加入到樹中的不同位置,並且判斷它們的commandpath是否等於預期的值。
結果:在main函式中這樣寫(和test函式中的案例一樣)
package main
import
("mycobra"
"fmt"
//"os/exec"
//"os"
)func
main()
執行結果:
完全符合預期,路徑是對的,輸出也是對的。
服務計算作業二
在go語言裡也可以編寫基準測試,規則如下 1.基準測試的 檔案必須以 test.go 結尾 2.基準測試的函式必須以 benchmark 開頭,必須是可以匯出的 3.基準測試的函式必須接受乙個指向 benchmark 型別的指標作為唯一引數 4.基準測試函式不能有返回值 5.b.resettimer...
服務計算作業1 配置你的私有雲
實驗目的 實驗內容 實驗中遇到的問題 初步了解虛擬化技術,理解雲計算的相關概念 理解系統工程師面臨的困境 理解自動化安裝 管理 devops 在雲應用中的重要性 用vbox建立虛擬機器 備份mv etc yum.repos.d centos base.repo etc yum.repos.d cen...
服務計算作業九 前後端分離的開發
本次作業中我負責的部分是前端。前端的實現使用了vue這款輕量級框架,在經過一些基本使用方法的學習之後實現也不算太難。vue的安裝和啟動這些部分由於都是輸入相應命令即可,因此不再贅述,主要講講 的實現。使用vue開發只需要修改其中src部分,而src中又主要以寫components和router為主。...