




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
用Go語言開發(fā)一個命令行工具Go語言從入門到精通掌握命令行操作與命令行參數(shù)掌握用Go語言實現(xiàn)一些典型代碼邏輯的方式01COMMAND02ALGORITHM03CLASSICtarget目標(biāo)掌握switch分支、基本排序算法與遞歸等目錄導(dǎo)航6.16.26.3命令行工具簡介典型命令行工具的架構(gòu)基本的命令行工具clix程序框架……Contents命令行工具CLI——CommandLineInterface(命令行界面)系統(tǒng)內(nèi)置命令與命令行工具軟件目錄導(dǎo)航6.16.26.3命令行工具簡介典型命令行工具的架構(gòu)基本的命令行工具clix程序框架……Contents命令行工具軟件的分析
能夠接收命令行參數(shù)能夠根據(jù)不同的參數(shù)做出不同的行為參數(shù)包括普通參數(shù)、開關(guān)參數(shù)和標(biāo)志參數(shù)目錄導(dǎo)航6.26.36.4……典型命令行工具的架構(gòu)基本的命令行工具clix程序框架Go語言中的switch語句……Contentsconst
ClixVersion
=
"1.00"
func
main()
{
args
:=
os.Args
argsLen
:=
len(args)
if
argsLen
<
2
{
t.Printfln("請輸入命令。")
return
}
subCmd
:=
args[1]
switch
subCmd
{
case
"version":
t.Printfln("CLIX
v%v",
ClixVersion)
break
default:
t.Printfln("無法識別的命令")
break
}
}命令行工具的極簡框架定義版本號處理子命令目錄導(dǎo)航6.36.46.5……基本的命令行工具clix程序框架Go語言中的switch語句clix的第一個命令:version……Contents
a
:=
10
if
a
<
0
{
println("a
<
0")
}
else
if
a
<
10
{
println("a
<
10")
}
else
if
a
<
100
{
println("a
<
100")
}
else
{
println("a
>=
100")
}
IF-ELSE與SWITCH語句對比
a
:=
10
switch
{
case
a
<
0:
println("a
<
0")
case
a
<
10:
println("a
<
10")
case
a
<
100:
println("a
<
100")
default:
println("a
>=
100")
}
邏輯更清晰default、break與fallthrough
default表示不滿足所有條件時走的默認(rèn)分支
break表示跳出case,可以省略
fallthrough表示繼續(xù)下一個case目錄導(dǎo)航6.46.56.6……Go語言中的switch語句clix的第一個命令:version增加體重指數(shù)計算命令calbmi……Contentsdefault、break與fallthroughclixversion目錄導(dǎo)航6.56.66.7……clix的第一個命令:version增加體重指數(shù)計算命令calbmi第三個命令:數(shù)字排序……Contents關(guān)鍵代碼:判斷字符串頭//
StartsWith
檢查字符串strA開始是否是subStrAfunc
StartsWith(strA
string,
subStrA
string)
bool
{
return
strings.HasPrefix(strA,
subStrA)}
關(guān)鍵代碼:截取子字符串s1
:=
"-w=70.0"
s2
:=
s1[len("-w="):]
println(s2)
關(guān)鍵代碼:獲取標(biāo)志參數(shù)func
GetFlag(argsA
[]string,
flagA
string)
string
{
for
_,
argT
:=
range
argsA
{
if
StartsWith(argT,
flagA)
{
argLen
:=
len(flagA)
tmpStr
:=
argT[argLen:]
return
tmpStr
}
}
return
""}關(guān)鍵代碼:獲取標(biāo)志參數(shù)func
GetFlag(argsA
[]string,
flagA
string)
string
{
for
_,
argT
:=
range
argsA
{
if
StartsWith(argT,
flagA)
{
argLen
:=
len(flagA)
tmpStr
:=
argT[argLen:]
return
tmpStr
}
}
return
""}執(zhí)行效果clixcalbmi-w=70.0-h=1.75關(guān)鍵代碼:判斷是否存在開關(guān)參數(shù)//
FlagExists
判斷命令行參數(shù)中是否存在開關(guān),用法:flag
:=
FlagExists(args,
"-value")func
FlagExists(argsA
[]string,
flagA
string)
bool
{
for
_,
argT
:=
range
argsA
{
if
StartsWith(argT,
flagA)
{
return
true
}
}
return
false}
flag包clixcalbmi-w70-h1.75-value_
=
flag.String("cmd",
"",
"子命令")W
:=
flag.Float64("w",
-1,
"體重,單位千克")H
:=
flag.Float64("h",
-1,
"身高,單位米")valueOnly
:=
flag.Bool("value",
false,
"是否只輸出數(shù)值")
flag.Parse()
BMI
:=
(*W)
/
math.Pow((*H),
2)
if
*valueOnly
{
t.Printf("%.2f",
BMI)
……目錄導(dǎo)航6.66.76.8……增加體重指數(shù)計算命令calbmi第三個命令:數(shù)字排序Go語言對典型代碼邏輯結(jié)構(gòu)的支持……Contents無限循環(huán)for
{
t.Printfln("當(dāng)前時間是:%v",
time.Now())
time.Sleep(3
*
time.Second)}
break語句中斷循環(huán)for
{
t.Printfln("當(dāng)前時間是:%v",
time.Now())
endTime
:=
time.Now()
if
endTime.Sub(startTime)
>
(20
*
time.Second)
{
break
}
time.Sleep(3
*
time.Second)
}單一條件的for循環(huán)for
time.Now().Sub(startTime)
<=
(20
*
time.Second)
{
t.Printfln("當(dāng)前時間是:%v",
time.Now())
time.Sleep(3
*
time.Second)
}
用continue手動繼續(xù)for循環(huán)for
a
:=
0;
a
<
10;
a++
{
println(a)
if
a
<
5
{
continue
}
a
=
a
+
1}
循環(huán)的嵌套a
:=
[]int{1,
2,
4,
8,
9,
0}
b
:=
[]int{1,
2,
3,
4,
5}
for
i
:=
0;
i
<
len(a);
i++
{
found
:=
true
for
j
:=
0;
j
<
len(b);
j++
{
if
a[i]
<=
b[j]
{
found
=
false
break
}
}
if
found
{
t.Printfln("找到了第%v個數(shù)字:%v",
i,
a[i])
}}s
:=
map[string]int{"number1":
1,
"number2":
2,
"number3":
4,
"number4":
8}
for
k,
v
:=
range
s
{
t.Printfln("%v=%v",
k,
v)}
t.Printfln("--------")
for
k,
v
:=
range
s
{
t.Printfln("%v=%v",
k,
v)}
t.Printfln("--------")
for
k
:=
range
s
{
t.Printfln("%v=%v",
k,
s[k])}for——range循環(huán)遍歷映射(map)兩次輸出的順序可能會不一樣(map的無序性)僅取鍵名兩重循環(huán)實現(xiàn)冒泡法排序numberList
:=
[]int{2,
4,
9,
5,
8}
listLen
:=
len(numberList)
for
i
:=
0;
i
<
(listLen
-
1);
i++
{
for
j
:=
i
+
1;
j
<
listLen;
j++
{
if
numberList[i]
<
numberList[j]
{
numberList[i],
numberList[j]
=
numberList[j],
numberList[i]
}
}}
命令行參數(shù)輸入數(shù)字序列
s
:=
os.Args[1]
list
:=
strings.Split(s,
",")
numberList
:=
make([]int,
len(list))
for
i,
v
:=
range
list
{
fmt.Sscanf(v,
"%d",
&numberList[i])
}
t.Printfln("numberList變量的類型是:%T,內(nèi)容是%v",
numberList,
numberList)
目錄導(dǎo)航6.76.8……第三個命令:數(shù)字排序Go語言對典型代碼邏輯結(jié)構(gòu)的支持Contents標(biāo)簽跳轉(zhuǎn)label1:for
i
:=
distance;
i
<
count-distance;
i++
{
for
j
:=
i
-
distance;
j
<
i+distance+1;
j++
{
if
intList[j]
>
intList[i]
{
continue
label1
}
}}
標(biāo)簽中斷l(xiāng)abel1:for
i
:=
distance;
i
<
count-distance;
i++
{
for
j
:=
i
-
distance;
j
<
i+distance+1;
j++
{
if
(i
!=
j)
&&
(intList[j]
==
intList[i])
{
t.Printfln("發(fā)現(xiàn)近鄰點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安陽車管預(yù)約管理辦法
- 自動監(jiān)控資質(zhì)管理辦法
- 種植設(shè)備設(shè)施管理辦法
- 福建游戲游藝管理辦法
- 育嬰護理知識培訓(xùn)課件
- 肥厚型心肌病
- 股票技術(shù)課件
- 原材料管理培訓(xùn)課件
- 肝癌中醫(yī)教學(xué)課件
- 廣東20年高考數(shù)學(xué)試卷
- 美容與整形外科學(xué)基礎(chǔ)
- 二年級勞動教育全冊教案
- 市政、園林取費定額
- 精準(zhǔn)設(shè)計支架助力習(xí)作表達-統(tǒng)編小學(xué)語文教材習(xí)作單元教學(xué)例談 論文
- 自動扶梯采購?fù)稑?biāo)方案(技術(shù)方案)
- 醫(yī)學(xué)院《病歷書寫》評分表
- 《戰(zhàn)略性績效管理》復(fù)習(xí)資料
- 駐足思考瞬間整理思路并有力表達完整版
- 河南省南陽市2022-2023學(xué)年高一下學(xué)期7月期末考試物理試題(PDF版含答案)
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)教程完整全套課件
- Module 6 Unit1 Ill draw the pictures(教學(xué)設(shè)計)-2022-2023學(xué)年英語四年級下冊 -外研版(一起)
評論
0/150
提交評論