版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
用Go語言開發(fā)一個命令行工具Go語言從入門到精通掌握命令行操作與命令行參數掌握用Go語言實現一些典型代碼邏輯的方式01COMMAND02ALGORITHM03CLASSICtarget目標掌握switch分支、基本排序算法與遞歸等目錄導航6.16.26.3命令行工具簡介典型命令行工具的架構基本的命令行工具clix程序框架……Contents命令行工具CLI——CommandLineInterface(命令行界面)系統(tǒng)內置命令與命令行工具軟件目錄導航6.16.26.3命令行工具簡介典型命令行工具的架構基本的命令行工具clix程序框架……Contents命令行工具軟件的分析
能夠接收命令行參數能夠根據不同的參數做出不同的行為參數包括普通參數、開關參數和標志參數目錄導航6.26.36.4……典型命令行工具的架構基本的命令行工具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
}
}命令行工具的極簡框架定義版本號處理子命令目錄導航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表示不滿足所有條件時走的默認分支
break表示跳出case,可以省略
fallthrough表示繼續(xù)下一個case目錄導航6.46.56.6……Go語言中的switch語句clix的第一個命令:version增加體重指數計算命令calbmi……Contentsdefault、break與fallthroughclixversion目錄導航6.56.66.7……clix的第一個命令:version增加體重指數計算命令calbmi第三個命令:數字排序……Contents關鍵代碼:判斷字符串頭//
StartsWith
檢查字符串strA開始是否是subStrAfunc
StartsWith(strA
string,
subStrA
string)
bool
{
return
strings.HasPrefix(strA,
subStrA)}
關鍵代碼:截取子字符串s1
:=
"-w=70.0"
s2
:=
s1[len("-w="):]
println(s2)
關鍵代碼:獲取標志參數func
GetFlag(argsA
[]string,
flagA
string)
string
{
for
_,
argT
:=
range
argsA
{
if
StartsWith(argT,
flagA)
{
argLen
:=
len(flagA)
tmpStr
:=
argT[argLen:]
return
tmpStr
}
}
return
""}關鍵代碼:獲取標志參數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關鍵代碼:判斷是否存在開關參數//
FlagExists
判斷命令行參數中是否存在開關,用法: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,
"是否只輸出數值")
flag.Parse()
BMI
:=
(*W)
/
math.Pow((*H),
2)
if
*valueOnly
{
t.Printf("%.2f",
BMI)
……目錄導航6.66.76.8……增加體重指數計算命令calbmi第三個命令:數字排序Go語言對典型代碼邏輯結構的支持……Contents無限循環(huán)for
{
t.Printfln("當前時間是:%v",
time.Now())
time.Sleep(3
*
time.Second)}
break語句中斷循環(huán)for
{
t.Printfln("當前時間是:%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("當前時間是:%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個數字:%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)實現冒泡法排序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]
}
}}
命令行參數輸入數字序列
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,內容是%v",
numberList,
numberList)
目錄導航6.76.8……第三個命令:數字排序Go語言對典型代碼邏輯結構的支持Contents標簽跳轉label1:for
i
:=
distance;
i
<
count-distance;
i++
{
for
j
:=
i
-
distance;
j
<
i+distance+1;
j++
{
if
intList[j]
>
intList[i]
{
continue
label1
}
}}
標簽中斷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ā)現近鄰點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科學技術職業(yè)學院《工程材料與構造》2023-2024學年第一學期期末試卷
- 廣東交通職業(yè)技術學院《油層物理實驗》2023-2024學年第一學期期末試卷
- 廣東建設職業(yè)技術學院《電子商務原理》2023-2024學年第一學期期末試卷
- 廣東工商職業(yè)技術大學《中國影視鑒賞》2023-2024學年第一學期期末試卷
- 閑聊培訓課件
- 《動態(tài)路由協議配置》課件
- 贛西科技職業(yè)學院《大數據金融應用》2023-2024學年第一學期期末試卷
- 應急救援安全培訓課件
- 贛州師范高等專科學?!缎畔踩夹g導論》2023-2024學年第一學期期末試卷
- 工程寶培訓課件
- 2025北京豐臺初二(上)期末數學真題試卷(含答案解析)
- 學校2025元旦假期安全教育宣傳課件
- 2024年地理知識競賽試題200題及答案
- 肝衰竭診治指南(2024年版)解讀
- 化學反應工程智慧樹知到期末考試答案章節(jié)答案2024年浙江工業(yè)大學
- 人生悟理-透過物理看人生智慧樹知到期末考試答案2024年
- 兒童劇劇本三只小豬
- 鉆孔灌注樁后注漿施工方案(最全版)
- 政工干部年度述職報告
- 1000MW電廠水處理DCS控制系統(tǒng)設計
- 硬件設計checklist
評論
0/150
提交評論