語言編程實(shí)踐sohu為軟件工程而生Java程序員寫_第1頁
語言編程實(shí)踐sohu為軟件工程而生Java程序員寫_第2頁
語言編程實(shí)踐sohu為軟件工程而生Java程序員寫_第3頁
語言編程實(shí)踐sohu為軟件工程而生Java程序員寫_第4頁
語言編程實(shí)踐sohu為軟件工程而生Java程序員寫_第5頁
已閱讀5頁,還剩116頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Go語言編程實(shí)

搜狐技術(shù)中 123456

GoGoWeb搜狐技術(shù)中 Go語言基礎(chǔ)——初(卻看起來像勱態(tài)類型、解釋型語言自

搜狐技術(shù)中 Go語言基礎(chǔ)——再來 和 和

搜狐技術(shù)中 */%<<*/%<<>>&+-|==!=<<=>

搜狐技術(shù)中 Go語言基礎(chǔ)——保留

搜狐技術(shù)中 長(zhǎng)度(字節(jié)1長(zhǎng)度(字節(jié)11040UnicodeCodePoint010范圍:-128~127;0~255040范圍:-21~21億;0~428047?815?8

搜狐技術(shù)中 Go語言基礎(chǔ)——基本數(shù)據(jù)類型(續(xù)?3264

搜狐技術(shù)中 Go語言基礎(chǔ)——內(nèi)置函closechannellen:獲取string、array、slice的長(zhǎng)度,mapkey的數(shù)量,以及沖channel的可用數(shù)據(jù)數(shù)量cap:獲取array的長(zhǎng)度,slice的容量,以及緩沖channel的最大緩容量 類型,除了初始化內(nèi)存還負(fù)責(zé)設(shè)置相append:向slice追加(在其尾部添加)一個(gè)戒多個(gè)元copy:在丌同slice 數(shù)據(jù)print/println:丌支持format,要格式化輸出,要使用fmtcomplex/real/imag:復(fù)數(shù)處理panic/recover:錯(cuò)誤處

搜狐技術(shù)中 Go語言基礎(chǔ)——常:===)=

搜狐技術(shù)中 Go語言基礎(chǔ)——變:imcvarvari1,s1=123,i2,s2:=123, array1:=//仁限函數(shù)內(nèi)使//仁限函數(shù)內(nèi)使

搜狐技術(shù)中 Go語言基礎(chǔ)——字符s1:=fmt.Printf("s1:%s\n",//=>s1part:cba1:=[]byte(s1)ba1[2]=s2:=string(ba1)fmt.Printf("s2:%s\n",s2)//=>s2:

搜狐技術(shù)中 Go語言基礎(chǔ)——字符串(續(xù)//=>s2:abCdefgfmt.Printf("s2(runearray)://=>s2(runearray):[979867101102fmt.Printf("Rawstring:\n%s\n",`a\tb

搜狐技術(shù)中 Go語言基礎(chǔ)——切vararr1fmt.Printf("arr1(1):%v\n",==fmt.Printf("arr1(2):%v\n",//=>arr1(2):[123

搜狐技術(shù)中 Go語言基礎(chǔ)——切片(續(xù)arr2:=make([]int,fmt.Printf(“arr2(1):%v\n”,//=>arr2(1):[0000n:=copy(arr2,arr1[1:4])fmt.Printf("%dcopied,arr2(2):%v\n",n,arr2)//=>3copied,arr2(2):[234

搜狐技術(shù)中 Go語言基礎(chǔ)——切片(續(xù)//=>arr2(2):[2340n=copy(arr2,fmt.Printf("%dcopied,arr2(3):%v\n",n,//=>4copied,arr2(3):[1234arr3:=[]int{6,5,4,3,2,n=copy(arr2,fmt.Printf("%dcopied,arr2(4):%v\n",n,//=>5copied,arr2(4):[6543

搜狐技術(shù)中 Go語言基礎(chǔ)——字m1:=map[string]int{"A":1,"B":fmt.Printf("m1(1):%v\n",//=>m1(1):map[A:1delete(m1,"B")fmt.Printf("m1(2):%v\n",m1)//=>m1(2):v,ok:=fmt.Printf("v:%v,ok?%v\n",v,//=>v:0,ok?

搜狐技術(shù)中 Go語言基礎(chǔ)——控制語vari1ifi1==0fmt.Println("Zero}elsefmt.Println("Nonzero}if1:=ifi2,ok:=if1.(int32);ok{fmt.Printf("i2:%d\n",i2未被打???}//=>Zero

搜狐技術(shù)中 Go語言基礎(chǔ)——控制語句(續(xù)varnint8switchncasecase1:

//繼續(xù)執(zhí)行下面的n=(n+1)*2n=-}fmt.Printf(“I:%d\n”,n)//=>I:

搜狐技術(shù)中 Go語言基礎(chǔ)——控制語句(續(xù)nn<{}fmt.Printf("N:%d\n",n)//=>N:fori:=0;i<100;i++}fmt.Printf("N:%d\n",n))//=>N:

搜狐技術(shù)中 Go語言基礎(chǔ)——控制語句(續(xù)strings:=[]string{"A","B","C"}fori,e:=rangestrings{fmt.Printf("%d:%s\n",i,}ABCstringMap:=stringMap:=map[int]string{1:fork,v:=rangestringMapfmt.Printf("%d:%s\n",k,}

搜狐技術(shù)中 Go語言基礎(chǔ)——函函 (FirstClassfuncGenMyFunc(hashfunc(string)int64,contentstring)func()stringreturnfunc()string}}_myFunc:=GenMyFunc(func(sstring)int64_ :=strconv.ParseInt(s,0,return},輸出結(jié)ContentHash:

搜狐技術(shù)中 Go語言基礎(chǔ)——funcfuncReadFile(filePathstring){file,err:=os.Open(filePath)iferr!=nil{return}deferreturn}

搜狐技術(shù)中 Go語言基礎(chǔ)——defer(續(xù)funcReadFile(filePathstring){file,errfuncReadFile(filePathstring){file,err:=os.Open(filePath)iferr!=nil{return}deferfunc()return}

搜狐技術(shù)中 Go語言基礎(chǔ)——異常處funcReadInputs(exitMarkstring,bufferbytes.Buffer){end:=falsereader:=fmt.Println("Pleasefor!endiferr}

:=丌可的,甚至需要終止程丌可的,甚至需要終止程一個(gè)“if(exitMark+"\n")==line}}}

搜狐技術(shù)中 Go語言基礎(chǔ)——異常處理(續(xù)funcmain()deferfunc()

iferr

recover();err!=nil

fmt.Printf("FatalError:%s\n",varbufferbytes.BufferReadInput("exit",buffer)fmt.Printf("Inputs:%s\n",}panic丌一定會(huì)被調(diào)用方recover,叧有在確認(rèn)有必要的時(shí)候才應(yīng)該這

搜狐技術(shù)中 Go語言基礎(chǔ)——結(jié)構(gòu)體不方typeDeptstruct{namestringbuildingtypeDeptstruct{namestringbuildingstringflooruint8}func(selfDept)Name()string{return}

搜狐技術(shù)中 Go語言基礎(chǔ)——結(jié)構(gòu)體不方法(續(xù)func(selffunc(selfDept)SetName(name{=}func(self*Dept)string,flooruint8){self.building=buildingself.floor=floor}

搜狐技術(shù)中 Go語言基礎(chǔ)——結(jié)構(gòu)體不方法(續(xù)2)dept1name:"My building:"Internet",floor:7,}fmt.Printf("dept(1):%v\n",//=>dept(1): 7}dept1.Relocate("Media",fmt.Printf("dept(3)://=>dept(2): Media

搜狐技術(shù)中 Go語言基礎(chǔ)——結(jié)構(gòu)體不方法(續(xù)3)

fmt.Printf("dept(3):%v\n",//=>dept(3): Mediafuncfunc(selfDept)func(self*Dept)說明“(selfDept)”相當(dāng)亍把本Dept實(shí)例的副本賦值給了“self“(self*Dept)”相當(dāng)亍把本Dept實(shí)例的指針的副本賦值給了“self

搜狐技術(shù)中 Go語言基礎(chǔ)——接typeDeptModeFullinterface包含了結(jié)構(gòu)DeptName()SetName(nameRelocate(buildingstring,floor}typeDeptModeAinterface仁包含了結(jié)構(gòu)Dept上的方法Name()stringSetName(name}typeDeptModeBinterface仁包含了結(jié)構(gòu)Dept的指針上的方法Relocate(buildingstring,flooruint8)}

搜狐技術(shù)中 Go語言基礎(chǔ)——接口(續(xù)dept1name:"My building:“Media",floor:7}switchv:=interface{}(dept1).(type){caseDeptModeFull:fmt.Printf("Thedept1isacasefmt.Printf("Thedept1isaDeptModeB.\n")caseDeptModeA:fmt.Printf("Thedept1isaDeptModeA.\n")fmt.Printf("Thetypeofdept1is%v\n",}//=>Thedept1isa

搜狐技術(shù)中 Go語言基礎(chǔ)——接口(續(xù)deptPtr1:=if_,ok:=interface{}(deptPtr1).(DeptModeFull);ok{fmt.Printf("ThedeptPtr1isaDeptModeFull.\n")}if_,ok:=interface{}(deptPtr1).(DeptModeA);ok{fmt.Printf("ThedeptPtr1isaDeptModeA.\n")}if_,ok:=interface{}(deptPtr1).(DeptModeB);okfmt.Printf("ThedeptPtr1isa}aaa

搜狐技術(shù)中 Go語言基礎(chǔ)——接口(續(xù)結(jié)構(gòu)Dept的方法集中仁包含方法接收者為Dept的方法,即:Name()SetName()。所以,結(jié)構(gòu)Dept的實(shí)例仁為DeptModeA的實(shí)*DeptDept*DeptName()、SetNam()和Roa()。所以,接口e——DeptModeFlDpoeDpoe。

搜狐技術(shù)中 Go語言基礎(chǔ)——接口(續(xù) dept1.Relocate("Media",12)fmt.Printf("Dept:%v\n",dept1)fmt.Printf("Deptname:%v\n",//=>Dept: Media12//=>Deptname:如果結(jié)構(gòu)的實(shí)例x是“可被尋址的”,且&x的方法集中包含方法mx.m()為(&x).m()的速記(快捷方式)即:dept1是可被尋址的,且&dept1的方法集中包含方法Relocate()dept1.Relocate()為&dept1.Relocate()的快捷方

搜狐技術(shù)中 Go語言基礎(chǔ)——程序結(jié)|src:Go程序源碼文件的存 |pkg:通過“goinstall”命令編譯安裝的二迚制靜態(tài)包文件(.a)||bin:通過“goinstall ||

搜狐技術(shù)中 Go語言基礎(chǔ)——程序結(jié)構(gòu)(續(xù)Go語言的源碼是以UTF-8的形 的Go語言以package來組織代碼,所有的代碼都必須在package同一包中可以有多個(gè)源碼文件(.go),且這些文件的 必須一致源碼文件中 可以 丌同,但編譯后的靜態(tài)文件(.a)會(huì) 同名 生產(chǎn)代碼和測(cè)試代碼需要分別放在單獨(dú)的文件中,測(cè)試代碼文件“_test.go”結(jié)尾,且這些文件需要在同一 中

搜狐技術(shù)中 Go語言基礎(chǔ)——程序結(jié)構(gòu)(續(xù)可執(zhí)行程序(戒者說程 )文件需 為main包,幵有無參和無返回值 函數(shù),像這樣packagepackageimport)funcmain()fmt.Println("Herewe}可以使?os.Exit(0)返回終?止迚程,也可以用os.Args獲取命令行吭勱參

搜狐技術(shù)中 Go語言基礎(chǔ)——程序結(jié)構(gòu)(續(xù)如果要在代碼中使用另一個(gè)包的程序,首先需要導(dǎo)入packagepackageimport"fmt要使用fmt"http://)funcmain()fmt.Println("Herewelogger:=logger.Infoln("Herewe}包路徑=包 下路徑/靜態(tài)包主?文件名(丌包含

搜狐技術(shù)中 Go語言基礎(chǔ)——程序結(jié)構(gòu)(續(xù)import"go_lib/logging"http://正常模式:導(dǎo)入后即可通過 LL._可以通過 簡(jiǎn)便模式:導(dǎo)入包幵可

搜狐技術(shù)中 Go語言基礎(chǔ)——程序結(jié)構(gòu)(續(xù)同一包中可以在多個(gè)所有包初始化函數(shù)都會(huì)在main()乊前、在單一線程上被調(diào)?,且仁行一編譯器丌能保證多個(gè)包初始化函數(shù)的執(zhí)行次序包初始化函數(shù)在當(dāng)前包所有全局變量初始化(零戒初始化表達(dá)式值完成后執(zhí)丌能在程序代碼中直接戒間接調(diào)?用初始化函

搜狐技術(shù)中 Go語言基礎(chǔ)——程序結(jié)構(gòu)(續(xù)packageimport)varloggerfuncinit()logger=}funcmain()logger.Infoln("Herewe}

搜狐技術(shù)中 Go語言基礎(chǔ)——安裝和環(huán)境設(shè)從 相應(yīng)版本portable版本即 設(shè)置Go :exportGOROOT=/usr/local/go設(shè)置Go項(xiàng)目 ,也即是前文所說的GOPATH,如按照慣例,也為了讓其他項(xiàng)目使用,用Go寫的項(xiàng)目都應(yīng)該放 下,且 不項(xiàng)目同名

搜狐技術(shù)中 Go語言基礎(chǔ)——構(gòu)建工Go自 如果已經(jīng)正確的安裝和設(shè)置Go的話,在命令行上敲“go

搜狐技術(shù)中 Go語言基礎(chǔ)——構(gòu)建工具(續(xù)packageimport)varnamefuncinit()flag.StringVar(&name,"vn","visitor","Thenameofthe}funcmain()fmt.Printf("Herewego,%s!\n",}

搜狐技術(shù)中 Go語言基礎(chǔ)——構(gòu)建工具(續(xù)go<GOPATH>/src$<GOPATH>/src$gorundemo1.go-vn"Harry"Herewego,Harry!go<GOPATH>/src$<GOPATH>/src$gobuild<GOPATH>/src$demo1<GOPATH>/src$./demo1-vnHerewego,

搜狐技術(shù)中 基礎(chǔ)編程實(shí)戓——packagetypepackagetypeStackinterface{Len()Cap()Peek()interface{}Pop()interface{}Push(valueinterface{})}

搜狐技術(shù)中 基礎(chǔ)編程實(shí)戓——Stack(續(xù)packagetypeSimpleStackstruct{capacityuintcursorcontainer}實(shí)現(xiàn)了Stack接口中定義的所有方funcNewSimpleStack(myCapacityuint)Stackreturn&SimpleStack{capacity:}

搜狐技術(shù)中 基礎(chǔ)編程實(shí)戓——Stack(續(xù)packageimport)funcTestOps(t*testing.T)}

搜狐技術(shù)中 基礎(chǔ)編程實(shí)戓——Stack(續(xù)<GOPATH>/src/part1/stack$<GOPATH>/src/part1/stack$gotest Go語言內(nèi)置了測(cè)試工具和標(biāo)準(zhǔn)這也充分體現(xiàn)了Go語言是“為軟件工程而生”的編程和測(cè)試是密丌可

搜狐技術(shù)中 <GOPATH>/src/part1/stack$gotest-基礎(chǔ)編<GOPATH>/src/part1/stack$gotest-

搜狐技術(shù)中 第一部分小Go基礎(chǔ)編程及實(shí)戓的源碼可以到下

搜狐技術(shù)中 Go幵發(fā)編程——概一種比線程更輕通道,可以在普通和Goruntine場(chǎng) 為數(shù)據(jù)甚至代碼的載體和通。提供了一些經(jīng)典的幵

搜狐技術(shù)中 Go幵發(fā)編程—— 文檔《EffectiveGo》Donotcommunicatebysharingmemory.Instead,sharememorybycommunicating.

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)相當(dāng)亍一個(gè)函 ,它不在同一地址空間中的其他goroutines幵行執(zhí)行。(注意:是“幵行由Go語言特有的關(guān)鍵字“go”來吭勱一gorouti需4~K的棧內(nèi)減得多。這讓“同時(shí)運(yùn)?千上萬幵發(fā)務(wù)成為能。注:丌要 通過基亍OScot(yiel/sme)?。

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)Lua的Python的迭代器 Ruby&C#的Fiber(微線程、纖程Erlang的GreenScala的

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)goroutine——更高級(jí)的協(xié)程

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)packageimport)funcgreet(namestring){ o,%s!\n",name)}funcmain()name:=gotime.Sleep(10*}

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)<GOPATH>/src$gorundemo2.goo,Harry!//////time.Sleep(10*<GOPATH>/src$<GOPATH>/src$gorunGoodbye,

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)packageimport)funcmain()gofunc()}

搜狐技術(shù)中 Go幵發(fā)編程——goroutines(續(xù)<GOPATH>/src$<GOPATH>/src$gorundemo3.goGN:3.////<GOPATH>/src$<GOPATH>/src$gorun

搜狐技術(shù)中 Go幵發(fā)編程—— ——摘自《TheWayToGovarvarch1chanmake(chanintint類型的非緩沖通ch2make(chanint5int類型的緩沖通

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)packageimport)varch=make(chanvarcontentfuncset()content="It'saunbuffered}funcmain()goch<-

“ch0”語句會(huì)阻塞,直至“ch”執(zhí)}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)<GOPATH>/src$<GOPATH>/src$gorunIt'saunbuffered////varch=make(chan//<-//ch<-<GOPATH>/src$<GOPATH>/src$gorun

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)<GOPATH>/src/demo_chan2.gopackageimport)funcmain()tick:=make(chanint,gofunc()time.Sleep(2*time.Second)count:=1fortime.Sleep(1*tick<-}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)forv:=forv:=rangetickifv==5}}<GOPATH>/src$<GOPATH>/src$gorun12345

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)funcmain()tick:=make(chanint,1)gofunc(){time.Sleep(2*count:=1for{time.Sleep(1*tick<-ifcount==5}}forv:=rangetick}}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)12345

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)可將channel指定為單向通道。比如:“<-chanstring”仁能從通接收字符串,而“chan<-string”仁能向通道發(fā)送<GOPATH>/src/demo_chan3.gopackagepackagefuncreceive(overchan<-bool)}funcmain()o:=make(chango}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)<GOPATH>/src$<GOPATH>/src$gorun#command-line-./demo_chan3.go:4:invalidoperation:<-over(receivesend-onlytypechan<-funcfuncreceive(overchan<-bool)over<-}<GOPATH>/src$<GOPATH>/src$gorun

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)packagefuncreceive(c<-chanint,overchan<-bool)forv:=rangec}over<-}funcsend(cchan<-int)fori:=0;i<3;i++{c<-i}}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)funcmain()funcmain()c:=make(chanint)o:=make(chanbool)goreceive(c,o)go}<GOPATH>/src$<GOPATH>/src$gorundemo_chan4.go12

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)如果需要從多個(gè)丌同的幵發(fā)執(zhí)行的goroutines獲取值,則可以用來協(xié)劣完成select可 多個(gè)channel的輸入數(shù)據(jù),一個(gè)channel對(duì)應(yīng)一個(gè)case select可以有一個(gè)default子句。當(dāng)仸何 不switch丌同的是,select語句塊中丌能出現(xiàn)fallthrough

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)packageimport)funcsend(chchan<-int,numberint)ch<-}funcmain()ch1:=make(chanint)ch2:=make(chanint)gosend(ch1,2)gosend(ch2,

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)selectcaseselectcasev1:=<-fmt.Printf("%s:%d\n","CH1",casev2:=<-fmt.Printf("%s:%d\n","CH2",}}<GOPATH>/src$<GOPATH>/src$gorunCH1:

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)selectcasev1selectcasev1:=<-fmt.Printf("%s:%d\n","CH1",v1)casev2:=<-ch2:fmt.Printf("%s:%d\n","CH2",fmt.Println("Noneofthechanneloperationscan}}<GOPATH>/src$<GOPATH>/src$gorunNoneofthechanneloperationscan

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)當(dāng)所有的 channel中都無數(shù)據(jù)時(shí),則select會(huì)一直等到其中個(gè)有數(shù)據(jù)為當(dāng)多個(gè) channel中都有數(shù)據(jù)時(shí),則select會(huì)隨機(jī)選擇一個(gè)執(zhí)行 如果想持續(xù) 多個(gè)channel的話需要用for語句協(xié)劣

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)packageimport)funcsend(chchan<-int){fori:=0;i<5;i++{ch<-}}funcmain()ch1:=make(chanint)ch2:=make(chanint)gosend(ch1)go

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)forselectforselectcasev1:=<-casev2:=<-}}}CH1:CH1:go搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)CH2:CH1:CH2:CH2:CH2:CH1:CH2:CH1:CH1:CH1:CH1:CH2:CH2:

就這樣一直行下去了搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)forselectforselectcasev1,ok:=<-if!ok}casev2,ok:=<-if!ok}}}}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)01020102123344程序還是會(huì)一直運(yùn)行下去

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)overTag:=make(changofunc()forselectcasev1,ok:=<-if!okoverTag<-}fmt.Printf("%s:%d\n","CH1",v1)casev2,ok:=<-ch2:if!okoverTag<-}}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)overTags:=overTags:=make([]int,forv:=rangeoverTag{overTags[v]=1ifoverTags[0]==1&&overTags[1]==1}}}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)00110011223344

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)time包里提供了一些有意思的功能,這些功能是不channel相結(jié)合After函數(shù):起到定時(shí)器的作用,指定的納秒后會(huì)向返回的channel放入一個(gè)當(dāng)前時(shí)間(time.Time)的實(shí)Tick函數(shù):起到循環(huán)定時(shí)器的channel中放入一個(gè)當(dāng)前時(shí)間(time.Time)的實(shí)例Ticker結(jié)構(gòu):循環(huán)定時(shí)器。Tick函數(shù)就是包裝它來完成功能的。該時(shí)器可以被中

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)packageimport)funcmain()ch1:=make(changofunc()fori:=0;i<10;i++ch1<-time.Sleep(1*}timeout:=time.After(5*overTag:=make(chan

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)gofunc()forselectcasev1,ok:=<-ch1:if!ok{overTag<-}case<-timeout:overTag<-true}}}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)<GOPATH>/src$<GOPATH>/src$gorun01234

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)packageimport)funcmain()ch1:=make(changofunc()fori:=0;i<5;i++ch1<-time.Sleep(1*}tick:=time.Tick(1*overTag:=make(chan

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)gofunc()forselectcase<-v,ok:=<-if!okoverTag<-true}}}}

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)<GOPATH>/src$<GOPATH>/src$gorunClosed01234

搜狐技術(shù)中 Go幵發(fā)編程——channel(續(xù)packageimport)funcmain()ch1:=make(chanticker:=time.NewTicker(1*

Go幵發(fā)編程——channel(續(xù)gofunc()forselectcase<-ticker.C:select{casech1<-1:casech1<-2:casech1<-3:}

case<-time.After(2*time.Second):}}

Go幵發(fā)編程——channel(續(xù)overTag:=make(changofunc()forselectcasev,ok:=<-ch1:if!ok{overTag<-}}}time.Sleep(5*fmt.Println("Stop}

Go幵發(fā)編程——channel(續(xù)<GOPATH>/src$<GOPATH>/src$gorunClosedClosed32121out.

幵發(fā)編程實(shí)戓——packageimport)typePubSubListenerinterfaceInit(addrstring)

Listen(handlerfunc(connnet.Conn))Close()Addr()}

幵發(fā)編程實(shí)戓——NIO(續(xù)typePubSubSenderinterfaceInit(remoteAddrstring,timeouttime.Duration)Send(contentstring)errorReceive(delimbyte)<-chanPubSubContentClose()boolAddr()net.AddrRemoteAddr()net.Addr

幵發(fā)編程實(shí)戓——NIO(續(xù)typePubSubContentstruct{contentstringerr}func

Content()string}func

Err()error}}

幵發(fā)編程實(shí)戓——NIO(續(xù)packageimport

)typeTcpListenerstruct{listenernet.Listeneractiveboollock}

幵發(fā)編程實(shí)戓——NIO(續(xù)func(self*TcpListener)Init(addrstring)errordeferifself.activereturn

}ln,err:=net.Listen("tcp",iferr!=nilreturn}self.listener=lnself.active=truereturnnil}

幵發(fā)編程實(shí)戓——NIO(續(xù)func(self*TcpListener)Listen(handlerfunc(connnet.Conn))error{if!self.active{}gofunc()for

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論