




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Go常量Go變量Go數(shù)值Go數(shù)組Go字典Go方法Go結構體Go接口Go字符串格式化Go自定義排序GoDeferGoforGoJSON支持GoLineFiltersGo狀態(tài)協(xié)程GoPanicGorange函數(shù)GoSHA1GoSwitch語句GoURL解析GoGo超時Go打點器Go文件Go工作池GoGoGo計時器 oworldGo命令行參數(shù)GoGoGoGoGoGoGoGo寫入文件Go信號處理Go指針原作者 譯者:@jemygraw@everyx僅用于學習交流之用,用于商業(yè)用途。(如果給我打賞,我是不會的內Go常量Go變量Go數(shù)值Go數(shù)組Go字典GoGo結構體Go接口Go字符串格式化Go自定義排序GoBase64編碼GoDeferGoExit.mdGoforGoJSON支持GoLineFiltersGo狀態(tài)協(xié)程GoPanicGorange函數(shù)GoSHA1GoString與Byte切片之間的轉換GoSwitch語句GoURL解析GoGo超時Go打點器Go工作池GoGoGo計時器 oGoGoGoGoGoGoGoGoGo寫入文件Go信號處理Go指針Go常Go常使 關鍵字來定義常量packagepackageimport"fmt""constconstsstring=funcmain()constn=常量表達式可以執(zhí)行任意精度數(shù)學計算constd=3e20/n}Go變Go變使 關鍵字來定義變量intint8int16int32uintuint8uint16uint32uint64uintptrbyte//uint8的別名float32complex64packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()`var`varastring=你一次可以定義多個變量varb,cint=1,2fmt.Println(b,c)Go會推斷出具有初始值的變量的類型vard=truevareintf:=}1GoGo數(shù)packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()字符串可以使用"+"fmt.Println("go"+fmt.Println("1+11+1)fmt.Println("7.0/3.0=",fmt.Println(true&&false)fmt.Println(true||false)}1+1=7.0/3.0=GoGo數(shù)組是一個具有相同數(shù)據(jù)類型的元素組成的
packagemainimport"fmt"funcmain(){//對于整數(shù),零值就是0vara[5]intfmt.Println("emp:"a)"array[indexvalue"a[4]=100b:=[5]int{1,2,3,4,//來獲 vartwoDfori:=0;i<2;{forj:=0;j<3;{twoD[i][j]=i+}}fmt.Println("2d:",}emp:emp:[0000set:[0000get:len::] 示例packagepackagemainimportfuncmain()vara=new([5]int)fmt.Println(a,len(a))}functest(a{a[1]=}&[0&[05000]示例packagepackageimport"fmt"funcmain()a:={0,{8,}b:={0,{8,}fmt.Println(a,len(a))fmt.Println(b,}typeUser{IdNameName}[{0[{0User0}{8User8}][0x1f2161300x1f216140]GoGopackagemainimport"fmt"funcmain()創(chuàng)建一個字典可以使用內置函數(shù)"make(map[鍵類型]值類型)"m:=make(map[string]int)m["k1"]=m["k2"]=獲取一個鍵的值"name[key]".v1:=m["k1"]fmt.Println("v1:",delete(m,_,ok:=你可以用n:=map[string]int{"foo":1,"bar":fmt.Println("map:",}map:map:map[k1:7k2:13]v1:7len:ok:falsemap:map[foo:1Go數(shù)Gopackagepackagemainimportfuncplus(aint,bint)intGo需要使用return語句顯式地返回值returna+b}funcmain()名稱(參數(shù)列表)"resplus(1fmt.Println("1+2=",}1+21+2=GoGoimport"fmt"typerectstruct{width,height}這個area方法有一個限定類型func(r*rect)area(){returnr.width*}//那么在該方 func(rrect)perim(){return2*r.width+}funcmain()r:=rect{width:10,height:fmt.Println("area:", rp:=fmt.Println("area:",}area:area:perim:area:perim:示例MethodMethod MethodMethodimport)funcmain()p {2,varf1func(int)=p.test.test(p,varf2func(f2(p,4),int)} {IdintNamestring}func)test(x{fmt.Println("Id:",this.Id,"Name",this.Name)fmt.Println("x=",x)}Id:Id:2x=Id:2x=Id:2x=Id:2x=示例使 import)funcmain()p:=Student{{2, "},} {IdintNamestring}typeStudent{Score}func){ }func(thisStudent){fmt.Println("student}studentstudentGo構Go構packagemainimport//這 {namestringageint}funcmain() {name:"Alice",age: {name: {name:"Ann",age://使用點號(.) s {name:"Sean",age://結構體指針也可以使用點號(.) Go語言會自動識別出來sp:=&s結構體成員變量的值是可以改變的sp.age=51}{Bob{Bob{Alice{FredGo包Go示例packagepackagemainimport //這個返回 funcintSeq()func(){i:=returnfunc(){i+=return}}funcmain()//nextInt:=調用幾次nextInt,看看閉包的效果newInts:=}11231示例packagepackagemainimportfuncmain()add10add10closure(10)//其實是構造了一個加10add20:=closure(20)}funcclosure(xint)func(yint){returnfunc(yint)int{returnx+y}}示例packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()varfs[]func()fori:=0;i<3;i++fs=append(fs,func(){return}for_,f:=range{fmt.Printf("%p=%v\n",f,}}0x4012000x401200=0x401200=0x401200=示例packagepackagemainimportfuncfuncadder()func(int){sum:=returnfunc(xint){sum+=xreturn}}funcmain()result:=fori:=0;i<10;{}}00GoGopackageimport"fmt"typegeometry{area()float64perim()float64}typesquare{width,height}typecircle{radius}func(ssquare)area(){returns.width*}func(ssquare)perim(){return2*s.width+}func(ccircle)area()float64returnmath.Pi*c.radius*}func(ccircle)perim(){return2*math.Pi*}////在measure函 funcmeasure(g{fmt.Println(g)}funcmain()s:=square{width:3,height:4}c:=circle{radius:5}//////函數(shù)的參數(shù)}{3{3Go字符串操作Go字符串操作函packageimports"strings"import"fmt"varp=fmt.Printlnfuncmain(){p("Contains:",s.Contains("test", ",s.Count("test",p("HasPrefix:",s.HasPrefix("test",p("HasSuffix:",s.HasSuffix("test", ",s.Index("test", ",s.Join([]string{"a","b"},"-")) ",s.Repeat("a",5)) ",s.Replace("foo","o","0",- ",s.Replace("foo","o","0", ",s.Split("a-b-c-d-e","-")) ",s.ToLower("TEST")) p("Len:", p("Char:", }Contains:Contains:trueCount:2HasPrefix:trueHasSuffix:trueIndex:1Join:a-Repeat: [abcd Len:Len:Char:Go字符串格式packageimport"os"typepoint{x,y}funcmain()p:=point{1,`%#v`格式化輸出將輸出一個值的Go語法表示方式。fmt.Printf("%#v\n",p)//格式 浮點型數(shù)值也有幾種格式化方法。最基本的一種是`%f`fmt.Printf("%f\n",78.9)//`%e`和`%E`使用科 fmt.Printf("%e\n",輸出像Go源碼中那樣帶雙引號的字符串,需使用`%q`fmt.Printf("%q\n","\"string\"")`%x`以16進制輸出字符串,每個字符串的字節(jié)用兩個字符輸出fmt.Printf("%x\n","hexthis")fmt.Printf("|%6d|%6d|\n",12,//Toleft-justify,usethe`-`flag.fmt.Printf("|%-6.2f|%-6.2f|\n",1.2,3.45)fmt.Printf("|%6s|%6s|\n","foo",//s:=fmt.Sprintf("a%s","string")你也可以使用`Fprintf`來將格式化后的值輸出到`io.Writers`fmt.Fprintf(os.Stderr,"an%s\n","error")}{1{1{x:1! |1.20||1.20|3.45 astringananpackagepackageimport"fmt"數(shù)組定義了一個別名ByLengthtypeByLength[]string//func(sByLength)Len(){return}func(sByLength)Swap(i,j{s[i],s[j]=s[j],}func(sByLength)Less(i,jint){returnlen(s[i])<}sort包的Sort方法來排序funcmain(){fruits:=[]string{"peach","banana","kiwi"}}[kiwi[kiwipeachpackageimportb64import"fmt"funcmain() data:="abc123!?$*&()'-sEnc:= 如果你不知道輸入是否是正確的//編碼,你需要檢測一 錯sDec,_:=uEnc:=uDec,_:=b64.URLEncoding.DecodeString(uEnc)}+-+-。
Gopackagepackageimport"os"funcmain()//f:=//f:=defercloseFile(f)}funccreateFile(pstring)f,err:=os.Create(p)iferr!=nil{}return}funcwriteFile(ffmt.Fprintln(f,"data")}funccloseFile(f}Go packagepackageimport"os"funcmain()defer}gogogogoexitexitstatus $$$echo$?Gofor循packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()i:=fori<=3i=i+1}forj:=7;j<=9;{}for}}1123789packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()if7%2==0fmt.Println("7is}elsefmt.Println("7is}只有ifif8%4==0fmt.Println("8isdivisibleby}ifnum:=9;num<{fmt.Println(num,"is}elseifnum<{fmt.Println(num,"has1}elsefmt.Println(num,"hasmultiple}isisisdivisiblebyhas1GoJSON支GoJSON支packageimport"encoding/json"import"fmt"import//我們使用兩個結構體來演示自定義數(shù)據(jù)類型的JSON數(shù)據(jù)編碼 typeResponse1{PageintFruits[]string}typeResponse2struct Fruits[]string`json:"fruits"`}funcmain()首先我們看一下將基礎數(shù)據(jù)類型編碼為JSON數(shù)據(jù)bolB,_:=json.Marshal(true)intB,_:=json.Marshal(1)fltB,_:=json.Marshal(2.34)strB,_:=json.Marshal("gopher")slcD:=[]string{"apple","peach","pear"}slcB,_:=json.Marshal(slcD)mapD:=map[string]int{"apple":5,"lettuce":7}mapB,_:=json.Marshal(mapD)為JSONres1D&Response1{Page:Fruits:[]string{"apple","peach","pear"}}res1B,_:=json.Marshal(res1D)res2D&Response2{Fruits:[]string{"apple","peach","pear"}}res2B,_:=json.Marshal(res2D)//現(xiàn)在我們看 byt:=//我們需要提供一個變量 //保 vardat iferr:=json.Unmarshal(byt,&dat);err!={}//為了使 //它們合適的類型,例如 num:=dat["num"].(float64) strs:=str1:=strs[0].(string)//我們還可以將 str:=`{"page":1,"fruits":["apple",res:=&Response2{}json.Unmarshal([]byte(str),&res)////enc:=d:=map[string]int{"apple":5,"lettuce":7}}map[num:6.13strs:[ab]]a&{1[applepeach]}GoLineGoLineGoLineGoLineLineFilters翻譯一下大概是行數(shù)據(jù)過濾器。簡單一點就是一個程序從標準輸入stdin數(shù)據(jù),然后處理一下,的GoLineFilters。import()funcmain() scanner:=forscanner.Scan()ucl:=}iferr:=scanner.Err();err!={fmt.Fprintln(os.Stderr,"error:",err)}}ooworldOhowareyouHOWAREGo態(tài)Goimport() typereadOp{keyintrespchanint}typewriteOp{keyintvalintrespchan}funcmain() varopsint64=//reads和writes通道將被其他協(xié)程用來從 reads:=make(chanwrites:=make(chan//gofunc()varstate=make(map[int]int)for{selectcaseread:=<-read.resp<-state[read.key]casewrite:=<-writes:state[write.key]=write.valwrite.resp<-true}}//這里啟動了100個 forr:=0;r<100;{gofunc(){for{read:=key:rand.Intn(5),resp:make(chanint)}reads<-atomic.AddInt64(&ops,1)}}我們開啟10forw:=0;w<10;{gofunc(){for{write:=&writeOp{val:rand.Intn(100),resp:make(chanbool)}writes<-atomic.AddInt64(&ops,1)}}讓協(xié)程運行1最后輸出操作數(shù)量opsopsFinal:=fmt.Println("ops:",}ops:ops:運行這個程序,我們會看到基于協(xié)程的狀態(tài)管理每秒可以處理800000個操作。對于這個例子來講,基于協(xié)程當然你可以選擇使用任意GoGopackagemainimport"os"funcpackagemainimport"os"funcmain(){panic("a_,err:=iferr!=nil{}}panic:aproblemgoroutinepanic:aproblemgoroutine1[running]:c.c:266+0xc8D:/GoDoc/go_panic.go:8+0x58exitstatus2Gorange函Gorange函packagemainimport"fmt"funcmain()nums:=[]int{2,3,sum:=for_,num:=range{sum+=}fori,num:=range{ifnum==3{}}kvs:=map[string]string{"a":"apple","b":fork,v:=rangekvs{fmt.Printf("%s->%s\n",k,v)}fori,c:=range{fmt.Println(i,}}sum:sum:index:->->011GoSHA1 Go packagepackageimport"fmt"funcmain()s:="sha1this生成一個hash的模式是//h:=////bs:=}sha1thisstringsha1thisstringGoString與Byte切片之間的轉packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()s1:=b1:=fmt.Println(b1)//[979899s2中文b2:=fmt.Println(b2)[228184173230150135]unicode,每個中文字符會由三個byter1:=fmt.Println(r1[979899100]r2:=fmt.Println(r2[2001325991]}GoSwitch語GoSwitch語packageimport"fmt"importfuncmain()基礎的switchi:=fmt.Print("write",i,"as")switchi{casecase2:case3:}//switch{casetime.Saturday,fmt.Println("it'stheweekend")fmt.Println("it'sa}t:=switchcaset.Hour()<12:fmt.Println("it'sbeforenoon")fmt.Println("it'safter}}write2astwoit'saweekdayit'swrite2astwoit'saweekdayit'sbeforenoonGoURL解GoURL解packageimport"fmt"import"net/url"importfuncmain() s:= //解析URL, u,err:=url.Parse(s)iferr!=nil{}//可以直 p,_:=u.User.Password()h:=strings.Split(u.Host,":")這里我們解析出路徑和`#`后面的片段//字符串切片作為valuem,_:=url.ParseQuery(u.RawQuery)}Go歷Gopackagemainimport"fmt"funcpackagemainimport"fmt"funcmain()我們遍歷queue通道里面的兩個數(shù)據(jù)queue:=make(chanstring,2)queue<-"one"queue<-"two"http://forelem:=range{}}Go行Gopackagepackagemainimportfuncf(fromstring)fori:=0;i<3;{fmt.Println(from,":",}}funcmain()假設我們有一個函數(shù)叫做//運行使用gogo//你也可以 gofunc(msg{讓mainvarinput}directdirect:direct:direct:goroutine:goroutine:goroutine:2Go行通道packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()使用`make(chan數(shù)據(jù)類型)`來創(chuàng)建一個Channel的類型就是它們所傳遞的數(shù)據(jù)的類型messages:=make(chanstring)gofunc(){messages<- " messages通道的數(shù)據(jù)msg:=<-messages}GoGopackageimport"fmt"funcmain()在這個例子中,假設我們執(zhí)行了一個外部調用,2秒之后將結果寫入c1c1:=make(chanstring,1)gofunc()time.Sleep(time.Second*2)c1<-"result1"這里使用select來實現(xiàn)超時,`resc1`-`resc1`超過1秒沒有執(zhí)行的話select{caseres:=<-c1:case<-time.After(time.Second*1):fmt.Println("timeout1")}//如 c2:=make(chanstring,gofunc()time.Sleep(time.Second*2)c2<-"result2"selectcaseres:=<-c2:case<-time.After(time.Second*3):fmt.Println("timeout2")}}timeouttimeoutresultGo誤Gopackageimport"fmt"funcf1(argint)(int,{ifarg==42errors.New使用錯誤信息作為參數(shù),構建一個基本的錯誤return-1,errors.New("can'tworkwith42")}returnarg+3,}typeargError{argintprobstring}func(e*argError)Error()stringreturnfmt.Sprintf("%d-%s",e.arg,}funcf2(argint)(int,{ifarg==42return-1,&argError{arg,"can'tworkwith}returnarg+3,}funcmain()//for_,i:=range[]int{7,42}ifr,e:=f1(i);e!={fmt.Println("f1failed:",}}elsefmt.Println("f1worked:",}}for_,i:=range[]int{7,42}ifr,e:=f2(i);e!={fmt.Println("f2failed:",}elsefmt.Println("f2worked:",}}//_,e:=ifae,ok:=e.(*argError);}}f1f1worked:f1failed:can'tworkwith42f2worked:10f2failed:42-can'tworkwithitcan'tworkwithGo點TickerTickerpackagepackageimport"fmt"funcmain()ticker:=time.NewTicker(time.Millisecond*gofunc()fort:=range{fmt.Println("Tickat",}//接收數(shù)據(jù),這里 time.Sleep(time.Millisecond*1500)}TickTickat2014-02-18Tickat2014-02-18Tickat2014-02-18Ticker Go歸Gopackagepackagemainimportfact函數(shù)不斷地調用自身,直到達到基本狀態(tài)fact(0)funcfact(nint)int{ifn==0return}returnn*fact(n-}funcmain()}Go文Go文import() funccheck(e{ife!=nil{}}funcmain()//最基本的文件讀寫任務就是把整個文件的內容 dat,err:=ioutil.ReadFile("/tmp/dat")//有的時候你 //f,err:=//從這個文件 //最 b1:=make([]byte,5)n1,err:=f.Read(b1)fmt.Printf("%dbytes:%s\n",n1,//那個位置開 數(shù)o2,err:=f.Seek(6,b2:=make([]byte,2)n2,err:=f.Read(b2)fmt.Printf("%dbytes@%d:%s\n",n2,o2, o3,err:=f.Seek(6,b3:=make([]byte,n3,n3,err:=io.ReadAtLeast(f,b3,2)fmt.Printf("%dbytes@%d:%s\n",n3,o3,_,err=f.Seek(0,//`bufio`包提供了緩 r4:=b4,err:=r4.Peek(5)fmt.Printf("5bytes:%s\n", }
iamjemywhoareyouwhatdoyou5 2bytes@6:2bytes@6:5 Go作Go作packageimport"fmt" //funcworker(idint,jobs<-chanint,resultschan<-{forj:=rangejobsfmt.Println("worker",id,"processingjob",j)results<-j*}}funcmain()這里我們定義兩個通道,一個jobs,一個resultsjobs:=make(chanint,100)results:=make(chanint,jobs通道里面還沒有工作任務forw1w3w+goworker(w,jobs,}forj:=1;j<=9;{jobs<-}fora:=1;a<=9;a++}workerworker1processingjobworker2processingjobworker3processingjobworker1processingjobworker3processingjobworker2processingjobworker1processingjobworker3processingjobworkerworker2processingjobGo閉Gopackagemainimport//funcmain()jobs:=make(chanint,5)done:=make(chanbool)這里是數(shù)據(jù)接收端協(xié)程,它重復使用`jmorejobs`如果所有數(shù)據(jù)接收完成,那么向done通道寫入truegofunc(){forj,more:=<-jobsifmore{fmt.Println("receivedjob",}elsefmt.Println("receivedalljobs")done<-true}}forj:=1;j<=3;{jobs<-jfmt.Println("sentjob",j)}fmt.Println("sentalljobs")}sentsentjobreceivedjobsentjobsentjob3sentalljobsreceivedjobreceivedjob3receivedreceivedjob3receivedalljobspackagepackagemainimport這個函數(shù)的返回值為兩個intfuncvals()(int,int){return3,}funcmain()獲取函數(shù)的兩個返回值a,b:=vals()_,c:=}3377GopackagepackagemainimporttypeCallbackfunc(x,yint)funcmain()x,y:=1,fmt.Println(test(x,y,}functest(x,yint,callbackCallback){returncallback(x,}funcadd(x,yint){returnx+}33Go函數(shù)命名返Go函數(shù)命名返回
packagepackagemainimportfuncsplit(sumint)(x,y{x=sum*4/9y=sum-x}funcmain()}77GoGoimport()funcmain()這個例子的狀態(tài)就是一個varstate=varmutex=ops將對狀態(tài)的操作進行計數(shù)varopsint64=0//這里我們啟動100個 forr:=0;r<100;{gofunc()total:=0for{//對于每 //唯一 //來 key:=rand.Intn(5)total+=state[key]atomic.AddInt64(&ops,1) //手動 }}//同樣我們使用10個 forw:=0;w<10;{gofunc(){for{key:=valval:=rand.Intn(100)state[key]=valatomic.AddInt64(&ops,1)}}//opsFinal:=atomic.LoadInt64(&ops)fmt.Println("ops:",opsFinal)//最后鎖定并輸出狀態(tài)fmt.Println("state:"state)}ops:ops:state:map[0:842:203:181:65Go境Gopackageimport"os"import"fmt"funcmain(){//////os.Setenv("FOO",這里我們打印所有的keyfor_,e:=range{pair:=strings.Split(e,"=")}}CHECKFIX1436934Go合Gopackageimport"fmt"返回t在vs中第一次出現(xiàn)的索引,如果沒有找到t,返回-1funcIndex(vs[]string,tstring)int{fori,v:=range{ifv==treturn}}return-}//如果t存在于vs中,那么返回true,否則falsefuncInclude(vs[]stringtstringboolreturnIndex(vs,t)>=}//那么返回true,否則funcAny(vs[]string,ffunc(string)bool){for_,v:=rangevs{iff(v){return}}return}//那么返回true,否則返回funcAll(vs[]string,ffunc(string)bool){for_,v:=rangevs{if!f(v){return}}return}//返回truefuncFilter(vs[]string,ffunc(string)bool){vsf:=make([]string,0)for_,v:=rangevs{iff(v)vsf=append(vsf,}}return}funcMap(vs[]string,ffunc(string)string){vsm:=make([]string,len(vs))fori,v:=rangevs{vsm[i]=}return}funcmain()varstrs=[]string{"peach","apple","pear",fmt.Println(Index(strs,"pear"))fmt.Println(Include(strs,"grape"))fmt.Println(Any(strs,func(vstring)bool{returnstrings.HasPrefix(v,fmt.Println(All(strs,func(vstring){returnstrings.HasPrefix(v,fmt.Println(Filter(strs,func(vstring){returnstrings.Contains(v,//上面的例子都使 }22[peachapplepear][PEACHAPPLEPEARPLUM]Go時Go時packagepackageimport"fmt"funcmain()這里的timer將等待2timer1:=time.NewTimer(time.Second*//typeTicket//C<-fmt.Println("Timer1//timer2:=gofunc()fmt.Println("Timer2stop2:=timer2.Stop()ifstop2{fmt.Println("Timer2}}TimerTimer1Timer2Go程Gopackageimport"fmt"import"os/exec"funcmain()//我們從一個簡 //函數(shù)創(chuàng)建了 dateCmd 生的話,`dateOut`將保存date的信息dateOut,err:=dateCmd.Output()iferr!=nil{}fmt.Println(">date") //grepCmd mand("grep", //向進程寫入數(shù)據(jù),然 grepIn,_:=grepOut,_:=grepCmd.StdoutPipe() ogrep\ngoodbyegrep"))grepBytes,_:=ioutil.ReadAll(grepOut)//`StderrPipe`的結果fmt.Println(">grep //觸發(fā)一個完 lsCmd mand("bash","-c","ls-a-l-lsOut,err:=lsCmd.Output()iferr!=nil{}}fmt.Println(">ls-a-l-h")}WedOct1009:53:11PDT> ols-a-l-drwxr-xr-x4mark136BOct316:29drwxr-xr-x91mark3.0KOct312:50-rw-r--r--1mark1.3KOct316:28spawning-Go packagepackageimport"os"funcmain()binary,lookErr:=iflookErr!=nil{}args:=[]string{"ls","-a","-l","-env:=//錯誤發(fā)生 execErr:=syscall.Exec(binary,args,ifexecErr!=nil{}}totaltotaldrwxr-xr-x4mark136BOct316:29drwxr-xr-x91mark3.0KOct312:50-rw-r--r--1mark1.3KOct316:28execing-Go經(jīng)典opackagepackagemainimportfuncmain()}o$ls$ls$gobuild $ $./el_01_ oworld為了使一個go文件能夠編譯為可執(zhí)行文件,包名必須是main 出 oworld"字符串
func
gorun gorungogobuild
Go可變長參數(shù)列packagepackagemainimportfuncsum(nums{fmt.Print(nums,"")total:=0for_,num:=range{total+=}}funcmain()sum(1,sum(1,2,nums:=[]int{1,2,3,4}}[1[12][123][1234]gogo
使 packagepackageimport"os"funcmain() argsWithProg:=os.ArgsargsWithoutProg:=os.Args[1:]arg:=}go在運行該程序的時候,需要首先 go$$gobuildcommand-line-$mand-line-argumentsabcd[mand-line-argumentsabcd][abcd]cGo命令行參數(shù)wc-Go命令行參wc-
中 就是一個命令行--
packageimport"fmt"funcmain()//基礎的標 wordPtr:=flag.String("word","foo","anumbPtr:=flag.Int("numb",42,"anboolPtr:=flag.Bool("fork",false,"a//需要把該變量的地址傳遞給 varsvarflag.StringVar(&svar,"svar","bar","astring//當所有的 //后的選項值fmt.Println("word:"*wordPtr)fmt.Println("numb:"*numbPtr)fmt.Println("fork:"fmt.Println("svar:",svar)fmt.Println("tail:",flag.Args())}gogobuildcommand-line$$mand-line-flags-word=opt-numb=7-fork-word:optnumb:7tail:[]$$mand-line-flags-word:optnumb:42svar:bartail:[]$$mand-line-flags-word=opta1a2word:optnumb:42svar:bartail:[a1a2$$mand-line-flags-word=opta1a2a3-word:optnumb:42svar:bartrailing:[a1a2a3-使 或 $$mand-line-flags-Usage -fork=false:a-numb=42:an-svar="bar":astring-word="foo":a$$mand-line-flags-flagprovidedbutnotdefined:-watUsageof./go_cmd_flag:-fork=false:-fork=false:a-numb=42:an-svar="bar":astring-word="foo":aGoGopackagepackageimport"fmt"importfuncmain()//切片內容,而不是返回一個新的切片strs[]string{"c""a""b"}fmt.Println("Strings:",strs)ints:=[]int{7,2, 我們還可以檢測切片是否已經(jīng)排序好s:=sort.IntsAreSorted(ints)fmt.Println("Sorted:",s)}Strings:Strings:[abc]Ints:[247]Sorted:trueGoGopackagemainimport"fmt"funcmain(){//這里我們創(chuàng)建了一個長度為 默認為零值,對于字符串就是""s:=make([]string,s[0]=s[1]=s[2]=s=append(s,s=append(s,"e",c:=make([]string,copy(c,s)fmt.Println("cpy:",c)//切片還支持一個取切片的操作////l:=l=ll=//我們可以同時 t:=[]string{"g","h","i"}fmt.Println("dcl:",t)//我們也可以創(chuàng)建 twoD:=make([][]int,3)fori:=0;i<3;i++{innerLen:=i+1twoD[i]=make([]int,forj:=0;j<innerLen;j++{twoD[i][j]=i+j}}fmt.Println("2d:",}emp:emp:[set:[abc]get:clen:apd:[abcdef]cpy:[abcdef]sl1:[cde]sl2:[abcde]sl3:[cdef]dcl:[ghi]2d:[[0][12][23
或者推斷長度標志 packagepackageimport"fmt"funcmain(){s1:=make([]int,0)}functest(s{s=append(s,}packagepackagemainimportfuncmain()s1:=make([]int,0)s1=test(s1)}functest(s[]int){s=append(s,3)returns}示例packagemainimport"fmt"funcpackagemainimport"fmt"funcmain()s1:=make([]int,3,fmt.Println("s1=",s1,len(s1),cap(s1))s2:=append(s1,1,2,3)fmt.Println("s1=",s1,len(s1),fmt.Println("s2=",s2,len(s2),cap(s2))s3:=append(s2,4,5,6)fmt.Println("s1=",s1,len(s1),fmt.Println("s2=",s2,len(s2),fmt.Println("s3=",s3,len(s3),}s1=s1=[000]3s1=[000]3s2=[000123]6s1=[000]3s2=[000123]6s3=[000123456]9示例packagepackagemainimportfuncmain()s1:=[]int{0,1,2,3,4,5,6,7,8,s2:=make([]int,3,20)varnintn=copy(s2,fmt.Println(n,s2,len(s2),s3:=fmt.Println(n,s3,len(s3),n=copy(s3,s1[1:5])fmt.Println(n,s3,len(s3),cap(s3))}33[012]33[45]22[12]2Go請求處理頻率控Go請求處理頻率控packageimport"fmt"funcmain()//發(fā)送5個數(shù)據(jù),然后關閉requests通道requests:=make(chanint,5)fori:=1;i<=5;i++{requests<-}limiter:=time.Tick(time.Millisecond* forreq:=rangerequestsfmt.Println("request",req,}//就允許同時處理3burstyLimiter:= .Time,fori:=0;i<3;{burstyLimiter<-}gofunc()fort:=rangetime.Tick(time.Millisecond*{burstyLimiter<-}//則每隔200毫秒處理一次burstyRequestsmake(chanint5)fori:=1;i<=5;i++{burstyRequests<-}}forreq:=rangeburstyRequestsfmt.Println("request",req,}}1234512345GoGopackageimport"fmt"importfuncmain()p:=從獲取當前時間開始now:=time.Now()then:=time.Date(2009,11,17,20,34,58,651387237,//輸出當天 Sub方法返回兩個時間的間隔(Duration)diff:=now.Sub(then)可以以不同的單位來計算間隔的大小}2014-03-022014-03-022009-11-17-03-022005-08-05Go間Go間packagepackageimport"fmt"importfuncmain()now:=secs:=now.Unix()nanos:=now.UnixNano()微秒手動除以一個數(shù)值來獲取毫秒millis:=nanos/1000000//為對應的時間fmt.Println(time.Unix(secs,0)),}2014-03-022014-03-0282014-03-02 2014-03-02 Go時間格式化和解Go時間格式化和解packageimport"fmt"importfuncmain()p:=t:=Formatp(t.Format("MonJan_215:04:052006"))t.Year(),t.Month(),t.Hour(),t.Minute(),t1,etime.Parse(withNanokitchen:=t2,e:=time.Parse(kitchen,"8:41PM")Parse將返回一個錯誤,如果所輸入的時間格式不對的話ansic:="MonJan_215:04:052006"_,e=time.Parse(ansic,"8:41PM")}MonMar322:39:312012-11-01-01-01 parsingtime"8:41PM"as"MonJan_215:04:052006":cannotparse"8:41PM"as"Mon"Go 提供了數(shù)字解析功能packagepackageimport"fmt"funcmain()f,_:=strconv.ParseFloat("1.234",i,_:=strconv.ParseInt("123",0,d,_:=strconv.ParseInt("0x1c8",0,64)u,_:=strconv.ParseUint("789",0,Atoi是解析10進制整型的快捷方法k,_:=strconv.Atoi("135")_,e:=}strconv.ParseInt:parsing"wat":invalidGo機Go packageimport"fmt"funcmain()例如`rand.Intn`返回一個整型隨機數(shù)n,0<=n<100fmt.Print(rand.Intn(100),",")`rand.Float64`返回一個`float64`//`0.0<=f<//例如`5.0<=f<10.0`fmt.Print((rand.Float64()*5)+5fmt.Print((rand.Float64()*5)+5)//為了使隨機數(shù) s1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西賀州市本年度(2025)小學一年級數(shù)學統(tǒng)編版期中考試((上下)學期)試卷及答案
- 江西省撫州市臨川區(qū)一中2025年高考英語考前最后一卷預測卷含答案
- 2025年天津市七校靜海一中楊村中學高三壓軸卷英語試卷含答案
- 臨床診斷學模擬練習題(附答案)
- 山西省晉城市部分學校2024-2025學年高一下學期期中考試數(shù)學試題(原卷版+解析版)
- 電纜線路敷設工程中的質量控制與驗收流程考核試卷
- 糧食儲備的社會責任考核試卷
- 再生物資回收在綠色供應鏈中的作用考核試卷
- 稀土金屬提煉過程中的政策法規(guī)研究與實踐考核試卷
- 職場情緒智能與人際溝通考核試卷
- 雙溪村移民安置區(qū)環(huán)境綜合整治工程 施工圖設計說明
- 校園保安防暴培訓
- 黑龍江省齊齊哈爾市龍江縣部分學校聯(lián)考2023-2024學年八年級下學期期中考試物理試題【含答案、解析】
- 2024-2025學年成都高新區(qū)七上數(shù)學期末考試試卷【含答案】
- “記憶中的人、事兒”為副標題(四川眉山原題+解題+范文+副標題作文“追求”主題)-2025年中考語文一輪復習之寫作
- 企業(yè)6S管理成果匯報
- 2024年企業(yè)員工研發(fā)補貼協(xié)議范本模板3篇
- 湖南省對口招生考試醫(yī)衛(wèi)專業(yè)試題(2024-2025年)
- 孕期碘缺乏病的健康宣教
- 全國賽課一等獎初中統(tǒng)編版七年級道德與法治上冊《樹立正確的人生目標》教學設計
- 《思想政治教育方法論》考研(第3版)鄭永廷配套考試題庫及答案【含名校真題、典型題】
評論
0/150
提交評論