Go學習筆記Part 2-基本觀念練習 - Medium
文章推薦指數: 80 %
本篇不會細談Go語言的觀念, 僅做範例分享, 以補強基本觀念.. “Go學習筆記Part 2-基本觀念練習” is published by Dorr Lin.
GetstartedOpeninappDorrLinSigninGetstarted6FollowersAboutGetstartedOpeninappGo學習筆記Part2-基本觀念練習DorrLinApr24,2019·26minread本篇不會細談Go語言的觀念,僅做範例分享,以補強基本觀念.如果是初學者,強烈推薦先閱讀或搭配閱讀其他基本觀念教學,推薦網站:Go語言Go語言玩弄中...XDopenhome.cc當然Google上也還有其他教學,挑一個適合自己的,如果你英文閱讀沒問題當然看官方文件是最好的:TheGoProgrammingLanguageSpecification-TheGoProgrammingLanguageTheforma...brepresentsthesetofcharactersfromathroughbasalternatives.Thehorizontalellipsis...isalso…golang.org進入主題.var關鍵字與Printfvar是宣告變數的關鍵字,Printf則是fmt套件中的function,可以指定列印格式.var宣告有兩種方式:個別宣告varaint=5varbstring=“bstring.”varcbool=falsefmt.Printf(“var:a=%d,b=%s,c=%t\n”,a,b,c)執行結果var:a=5,b=bstring.,c=false群體宣告var(dstring=“dstring.”efloat64=1.12fuint8=234)fmt.Printf(“var:d=%s,e=%g,f=%d\n”,d,e,f)執行結果var:d=dstring.,e=1.12,f=234除了var宣告方式不同外,也可以注意Printf中的指定格式,格式前面加’%’.例如:%s—列印字串;%d—列印整數;%g—列印浮點數;%t—列印布林值…等.詳細請至官方文件查閱Printf說明.變數值的交換過往傳統數值交換的寫法通常會借用暫存變數以交換,以Java為例inta,b,tmp;a=1;b=2;tmp=a;a=b;b=tmp;但Go可以這樣寫:g:=127.3h:=231.1fmt.Printf(“Beforeexchangeg,h—g:%g,h=%g\n”,g,h)g,h=h,gfmt.Printf(“Afterexchangeg,h—g:%g,h=%g\n”,g,h)執行結果Beforeexchangeg,h—g:127.3,h=231.1Afterexchangeg,h—g:231.1,h=127.3直接交換.其中”g:=127.3”這種寫法在Go中稱作短宣告,等同於”floatg=127.3”.常數(const)const也跟var一樣用兩種宣告方式:constcon_ifloat32=3.1416const(con_juint8=253con_kstring=“Thisisaconstantstring.”//con_l:=18.7;con_l=18.7con_m=-140con_n=787)//fmt.Printf(“con_j+con_l=%g\n”,(con_j+con_l))fmt.Printf(“con_n+con_l=%g\n”,(con_n+con_l))fmt.Printf(“con_n+con_m=%d\n”,(con_n+con_m))fmt.Printf(“con_m+con_l=%g\n”,(con_m+con_l))執行結果con_n+con_l=805.7con_n+con_m=647con_m+con_l=-121.3請注意註解,const不接受短宣告;2.Go在做數字運算時需要注意:a.指定型態時,不能與其他變數運算(eg.con_j+con_l);b.未指定型態下,以最後一個數字的型態為主,前面的數字將會被轉成該型態(eg.con_n+con_m);constiota(常數列舉)const(iota_o=3iota_p=iotaiota_q=iotaiota_r)fmt.Printf(“constantiota(常數列舉)iota_o=%d,”+“iota_p=%d,iota_q=%d,iota_r=%d.\n”,iota_o,iota_p,iota_q,iota_r)執行結果constantiota(常數列舉)iota_o=3,iota_p=1,iota_q=2,iota_r=3.當在常數宣告中使用iota,則會從1依序開始指定值給變數,iota之後未給值的變數也會依序被指定.另外此例的Printf也示範換行寫法,Printf程式換行除了用`這個符號外,用+號與雙引號串接,並加+必須放於字串尾端.字串str1:=“str1”str2:=“str2”varstr3stringfmt.Printf(“concatstr1andstr2:%s\n”,(str1+““+str2))fmt.Printf(“emptystring3:%q\n”,str3)執行結果concatstr1andstr2:str1str2emptystring3:””為指定值的str3,預設是空字串,而不是nil.示範三種計算字串長度的方式:varstr4string=“Go語言”fmt.Printf(“countstr4lengthbylen:%d\n”,len(str4))fmt.Printf(“countstr4lengthbylenandrune:%d\n”,len([]rune(str4)))fmt.Printf(“countstr4lengthbypackageunicodeutf-8:%d\n”,utf8.RuneCountInString(str4))執行結果countstr4lengthbylen:8countstr4lengthbylenandrune:4countstr4lengthbypackageunicodeutf-8:4len(…)—依據檔案的編碼計算字串位元組,目前這個go檔是utf-8編碼;len([]rune(…))—計算字串長度,也是一般應用在算字串長度時的寫法;utf8.RuneCountInString(str4)—以unicode套件的函式計算字串長度,也是依據go檔的編碼不同會有不同結果;複製字串:str4byte:=[]byte(str4)str4byte[0]=103str5:=string(str4byte)fmt.Printf(“Thestr4bytecopiesstr4(%s”+“),thestr5ismodifiedfromthestr4copy:%s\n”,str4,str5)fmt.Printf(“Theword‘語’indexis%dinstr5.”,strings.Index(str5,“語”))執行結果Thestr4bytecopiesstr4(Go語言),thestr5ismodifiedfromthestr4copy:go語言Theword‘語’indexis2instr5.這個範例有4個技巧—字串複製:str4byte:=[]byte(str4),用byte陣列儲存字串位元;修改字串:str4byte[0]=103,修改第一個字元,將大寫’G’改成小寫’g’;字串位元儲存為字串:str5:=string(str4byte);取得字元在字串中的位置:strings.Index(str5,“語”);所以字串複製是透過byte陣列與string函數達成,並且在修改複製的字串(str4byte[])不會影響原來的字串,所以str5的內容為”go語言”.透過string.Index取得字元位置,起始值為0.範例—字串走訪:str6:=“中華民國song”fori,char:=rangestr6{fmt.Printf(“迴圈走訪str6,字元%#U在位置%d.\n”,char,i)}執行結果迴圈走訪str6,字元U+4E2D‘中’在位置0.迴圈走訪str6,字元U+83EF‘華’在位置3.迴圈走訪str6,字元U+6C11‘民’在位置6.迴圈走訪str6,字元U+570B‘國’在位置9.迴圈走訪str6,字元U+0073‘s’在位置12.迴圈走訪str6,字元U+006F‘o’在位置13.迴圈走訪str6,字元U+006E’n’在位置14.迴圈走訪str6,字元U+0067‘g’在位置15.走訪字串是以位元方式執行,每個字根據語言的不同會佔用不一樣的位元大小,意思就是i並非以1的固定大小遞增.在此例中,中文字佔3bytes’華’位置會在3(起始);‘民’在6而英文字’s’則在12,所以在比對字串需要特別注意.字串比對:stra:=“Iamstra.\n”strb:=“\r\nIamstrb.”stra2:=“Iamstra.”/*strings.TrimXXX是去除前後的跳脫字元*/fmt.Printf(“TrimRightstra—%s,stra2—%s,straequalsstra2:%t\n”,strings.TrimRight(stra,“\n”),stra2,(strings.TrimRight(stra,“\n”)==stra2))fmt.Printf(“TrimLeftstrb—%s,stra2—%s,strbequalsstra2:%t\n”,strings.TrimLeft(strb,“\r\n”),stra2,(strings.TrimLeft(strb,“\r\n”)==stra2))執行結果TrimRightstra—Iamstra.,stra2—Iamstra.,straequalsstra2:trueTrimLeftstrb—Iamstrb.,stra2—Iamstra.,strbequalsstra2:false陣列宣告陣列的幾個方式vararr1[10]intarr1[0]=20arr1[1]=33//arr1index2~9未指定者補0arr2:=[10]int{1,2,3,4,5,6}//後面不足者補0//WrongSyntax//vararr4[…]int//arr4[0]=11//arr4[1]=29arr3:=[…]int{9,8,10,600}//動態陣列大小宣告方式arr4:=arr3//複製arr3給arr4fmt.Printf(“arr1=%v\n”,arr1)//印出值fmt.Printf(“arr2=%#v\n”,arr2)//印出詳細內容fmt.Printf(“arr3=%+v\n”,arr3)//適合用於struct,interface.fmt.Printf(“arr4copiedfromarr3=%#v\n”,arr4)執行結果arr1=[203300000000]arr2=[10]int{1,2,3,4,5,6,0,0,0,0}arr3=[9810600]arr4copiedfromarr3=[4]int{9,8,10,600}在這個例子中有兩個需要注意的地方,動態陣列無法先宣告再給值,arr4的宣告範例是錯的,要像arr3這樣;在格式化列印Printf中的%v有幾種列印格式,‘%v’—純印陣列值;’%#v’—印出陣列詳細內容;‘%+v’—適合用來印struct或interface的格式.二維陣列arr5:=[3][2]int{[2]int{3,4},[2]int{17,87},[2]int{0,0}}//3個size為2的陣列//arr6:=[2][…]int{[…]int{4,5,6,7},[…]int{1,20}}WrongSyntaxarr6:=[…][4]int{[4]int{4,5,6,7},[4]int{1,20,8,9}}//n個size為4的陣列fmt.Printf(“arr5=%#v\n”,arr5)fmt.Printf(“arr6=%#v\n”,arr6)fori,e:=rangearr1{fmt.Printf(“arr1[%d]=%d\n”,i,e)}forj:=0;j
延伸文章資訊
- 1完全自學! Go語言Golang實戰聖經| 誠品線上
Go語言Golang實戰聖經:,內容介紹:你從未見過如此完整的Go語言中文教材! ... 本書以豐富的範例及練習,帶領讀者實地操作Go 語言的基礎及相關特色,讀完就能立馬投入 ...
- 2Day05-Go 語法I - iT 邦幫忙
Go Phishing!30 天用Go 實作Reverse Proxy 之釣魚大作戰系列第5 篇 ... 終於要開始講語法囉~Go Playground 是一個練習Go 的好地方,以下的範例都會...
- 3GoLang - 語言基礎介紹與基本結構 - 關於網路那些事...
練習過程可以試著透過Go Playground 網頁編譯Go : https://play.golang.org/. 注意,底下範例主要在說明功能,可能會略過package 或main 等描述!!
- 4Go 语言之旅
欢迎来到Go 编程语言指南。 点击页面左上角的Go 指南可以访问本指南的模块列表。 ... 本指南由一系列幻灯片贯穿始终,其中有一些练习需要你来完成。
- 5整理了幾個golang的學習練習題 - 台部落
goLearningTest golang學習練習題初學go一直找不到合適的練習,最近在一本書中發現了一些練習題,整理,分享給大家代碼地址.