go语言编程音乐库代码
发布时间:2020-12-16 18:35:09 所属栏目:大数据 来源:网络整理
导读:go语言编程书上有一些代码有误和遗漏的地方,这里就行了修改与加如了一小段代码。 ---开始,我也搜个百度,大多都是一样的,而且在remove代码块还是有些问题(不能是传name)。 好吧!!不多说了.下面展示所有的代码。 ------------------------------------------
go语言编程书上有一些代码有误和遗漏的地方,这里就行了修改与加如了一小段代码。 ---开始,我也搜个百度,大多都是一样的,而且在remove代码块还是有些问题(不能是传name)。 好吧!!不多说了.下面展示所有的代码。 ------------------------------------------------------------------------------------------------------ 先贴入口文件. mplayer.go packagemain import( "bufio" "fmt" "os" "strconv" "strings" "mplayer/library"//这里是目录结构哦,别放做了,src下的mplayer目录下的library目录 "mplayer/mp"//src下的mplayer目录下的mp目录 ) funchandleLibCommands(tokens[]string){ iflen(tokens)<2{ fmt.Println(` Enterfollowingcommandstocontroltheplayer: liblist--Viewtheexistingmusiclib libadd<name><artist><source><type>--Addamusictothemusiclib libremove序号--Removethespecifiedmusicfromthelib `) return } switchtokens[1]{ case"list": fmt.Println("序号MP3_id名字作者路径类型") fori:=0;i<lib.Len();i++{ e,_:=lib.Get(i) fmt.Printf("%-4d%-8s%-10s%-12s%-20s%-5sn",i+1,e.Id,e.Name,e.Artist,e.Source,e.Type) //fmt.Println("",":","",e.Type) } case"add": { iflen(tokens)==6{ id++ lib.Add(&library.MusicEntry{strconv.Itoa(id),tokens[2],tokens[3],tokens[4],tokens[5]}) }else{ fmt.Println("USAGE:libadd<name><artist><source><type>") } } case"remove": iflen(tokens)==3{ index,_:=strconv.Atoi(tokens[2]) //fmt.Println(index) lib.Remove(index) fmt.Println("序号MP3_id名字作者路径类型") fori:=0;i<lib.Len();i++{ e,_:=lib.Get(i) fmt.Printf("%-4d%-8s%-10s%-12s%-20s%-5sn",e.Type) } }else{ fmt.Println("USAGE:libremove<id>") } default: fmt.Println("Unrecognizedlibcommand:",tokens[1]) } } funchandlePlayCommand(tokens[]string){ iflen(tokens)!=2{ fmt.Println("USAGE:play<name>") return } e:=lib.Find(tokens[1]) ife==nil{ fmt.Println("Themusic",tokens[1],"doesnotexist.") return } mp.Play(e.Source,e.Type) } varlib*library.MusicManager varidint=0 funcmain(){ lib=library.NewMusicManager() fmt.Println(` Enterfollowingcommandstocontroltheplayer: liblist--Viewtheexistingmusiclib libadd<name><artist><source><type>--Addamusictothemusiclib libremove<序号>--Removethespecifiedmusicfromthelib play<name>--Playthespecifiedmusic q|e--quit|exit `) r:=bufio.NewReader(os.Stdin) for{ fmt.Print("Entercommand->") rawLine,_,_:=r.ReadLine() line:=string(rawLine) ifline=="q"||line=="e"{ break } tokens:=strings.Split(line,"") iftokens[0]=="lib"{ handleLibCommands(tokens) }elseiftokens[0]=="play"{ handlePlayCommand(tokens) }else{ fmt.Println("Unrecognizedcommand:",tokens[0]) } } } manager.go //在mplayer目录下的library目录下 packagelibrary import( "errors" "fmt" ) typeMusicEntrystruct{ Idstring Namestring Artiststring Sourcestring Typestring } typeMusicManagerstruct{ musics[]MusicEntry } funcNewMusicManager()*MusicManager{ return&MusicManager{make([]MusicEntry,0)} } func(m*MusicManager)Len()int{ returnlen(m.musics) } func(m*MusicManager)Get(indexint)(music*MusicEntry,errerror){ ifindex<0||index>=len(m.musics){ returnnil,errors.New("Indexoutofrange.") } //fmt.Println(m) return&m.musics[index],nil } func(m*MusicManager)Find(namestring)*MusicEntry{ iflen(m.musics)==0{ returnnil } for_,m:=rangem.musics{ ifm.Name==name{ return&m } } returnnil } func(m*MusicManager)Add(music*MusicEntry){ m.musics=append(m.musics,*music) } func(m*MusicManager)Remove(indexint)*MusicEntry{ ifindex<0||index>len(m.musics){ fmt.Println("请重新选择删除的序号..") returnnil } removedMusic:=&m.musics[index-1] //从数组切片中删除元素 ifindex<len(m.musics){//中间元素 m.musics=append(m.musics[:index-1],m.musics[index:]...) }else{//删除的是最后一个元素 //fmt.Println("删除最后一个") m.musics=m.musics[:index-1] } returnremovedMusic } mp3.go //mplayer 目录下的mp目录 packagemp import( "fmt" "time" ) typeMP3Playerstruct{ statint progressint } typeWAVPlayerstruct{ statint progressint } func(p*MP3Player)Play(sourcestring){ fmt.Println("PlayingMP3music",source) p.progress=0 forp.progress<100{ time.Sleep(100*time.Millisecond)//假装正在播放 fmt.Print(".") p.progress+=10 } fmt.Println("nFinishedplaying",source) } func(p*WAVPlayer)Play(sourcestring){ fmt.Println("PlayingWAVmusic",source) } play.go //mplayer目录下的mp目录下 packagemp import"fmt" typePlayerinterface{ Play(sourcestring) } funcPlay(source,mtypestring){ varpPlayer switchmtype{ case"MP3": p=&MP3Player{} case"WAV": p=&WAVPlayer{} default: fmt.Println("Unsupportedmusictype",mtype) return } p.Play(source) } ----------------------------------------------------------------------------------------------------- 如上面有所遗漏或代码有误,请留言。欢迎勘误指正。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |