go 接口案例,音乐播放器
manager.go
//package main
package mlib
import "errors" type MusicEntry struct {
Id string
Name string
Artist string
Source string
Type string
} type MusicManager struct {
musics []MusicEntry
} func NewMusicManager() *MusicManager{ return &MusicManager{make([]MusicEntry,)}
} func (m *MusicManager) Len() int{
return len(m.musics)
} func (m *MusicManager ) Get(index int) (music *MusicEntry,err error){
if index < ||index >=len(m.musics){
return nil,errors.New("index out of range")
}
return &m.musics[index],nil
} func (m *MusicManager) Find(t_name string) *MusicEntry{
if len(m.musics) == {
return nil
}
for _,value := range m.musics{
if value.Name == t_name{
return &value
}
}
return nil
} func (m *MusicManager) Add(music *MusicEntry){
m.musics =append(m.musics,*music)
} func (m *MusicManager) Remove(index int) *MusicEntry{
if index< ||index >=len(m.musics){
return nil
} removeMusic := &m.musics[index] m.musics =append ( m.musics[:index], m.musics[index+:]...)
return removeMusic
}
type MusicEntry struct {
Id string
Name string
Artist string
Source string
Type string
}
首先我们先设计一个结构体用来存储歌曲的结构,上面的musicentry就是,id代表唯一比那好,剩下的故名之意,type是便是类型.mp3.avw
我们接下来通过musicmanager以一种数组切片的方式进行管理
上面的各个函数的功能就是正常的add增减remove删除,get(index),获得第index首歌曲,len求长度,list列出所有的歌曲
mp3.go
package mp
import "fmt"
import "time" type MP3player struct{
stat int
pro int
} func (p *MP3player )Play(source string){ p.pro=;
fmt.Println("MPS PLAY IS BEGINING") for p.pro<= {
time.Sleep(* time.Millisecond)
fmt.Print(".")
p.pro+=
}
fmt.Println("player os ending ",source)
} play.go
package mp import "fmt" type Player interface{
Play(source string)
} func Play(source ,m_type string){
var p Player
switch m_type{
case "MP3":
p=&MP3player{} default :
fmt.Println("the m_tye is not exits")
return
}
p.Play(source)
}
type MP3player struct{
stat int
pro int
}
这里我们使用interface接口的形式,我们可以使用一个接口才处理多种类型的音乐,根据不同的类型的音乐,去实现不同的接口就可以了
case "MP3":
p=&MP3player{}
像上面那样去赋值,下面通过p.play就可以调用了,至于paly,这里不能实现真正的paly,只不过是一种形式罢了
package main import "fmt"
import "bufio"
import "os" import "smp/mlib"
import "strings"
import "strconv" import "smp/mp" var lib *mlib.MusicManager
var id int=
var ctrl,signal chan int
func set(tokens[]string){
switch tokens[]{
case "list":
for i:=; i<lib.Len();i++{
e,_ :=lib.Get(i)
fmt.Println(e.Name,e.Artist,e.Source)
}
case "add":
id++
if len(tokens)=={
id++
lib.Add(&mlib.MusicEntry{strconv.Itoa(id),tokens[],tokens[],tokens[],tokens[]})
}else{
fmt.Println("tokens number is error")
}
default :
fmt.Println("tokens[1] is error")
}
} func musicplay(tokens [] string){
e :=lib.Find(tokens[])
if e==nil{
fmt.Println("find failed")
return
}
mp.Play(e.Source,e.Type)
} func main(){
fmt.Println("***************************************************being*******************************************************")
lib =mlib.NewMusicManager() r :=bufio.NewReader(os.Stdin)
fmt.Println("forof")
for {
rawline,_,_ :=r.ReadLine() line :=string(rawline) if line == "q" ||line =="e"{
break
}
fmt.Println("wozhi")
fmt.Println(len(line))
fmt.Println(line)
tokens :=strings.Split(line ," ")
fmt.Println(tokens)
if tokens[] == "lib" {
set(tokens)
} else if tokens[] == "play"{
musicplay(tokens)
}else{
fmt.Println("this is any this stdin")
} } }
上面就是主控制流程,我们这里主要就有两个函数,一个是set主要的功能就是添加歌曲,另一个主要的功能就是播放,这两个功能都是调用前面的几个模块,我们通过import已经导入了
我们从终端输出,通过readline读取,并进行string强转,split就行分割,提取argv,之后我们就可以正常处理了
下面是这个小程序的整体结构

下面是运行的情况

go 接口案例,音乐播放器的更多相关文章
- 在线音乐播放器-----酷狗音乐api接口抓取
首先身为一个在线音乐播放器,需要前端和数据库的搭配使用. 在数据库方面,我们没有办法制作,首先是版权问题,再加上数据量.所以我们需要借用其他网络播放器的数据库. 但是这些在线播放器,如百度,酷狗,酷我 ...
- 【大结局】《从案例中学习JavaScript》之酷炫音乐播放器(四)
这是之前写的用H5制作的音乐播放器,前三节其实已经做得差不多了,音轨的制作原理已经在上一节说明,不过一直还没有和音乐对接. 本章作为该系列的一个完结篇,我会专门把动态音轨的实现代码贴出来,demo地址 ...
- Andriod小项目——在线音乐播放器
转载自: http://blog.csdn.net/sunkes/article/details/51189189 Andriod小项目——在线音乐播放器 Android在线音乐播放器 从大一开始就已 ...
- Android开发6:Service的使用(简单音乐播放器的实现)
前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service ...
- Dewplayer 音乐播放器
Dewplayer 是一款用于 Web 的轻量级 Flash 音乐播放器.提供有多种样式选择,支持播放列表,并可以通过 JavaScript 接口来控制播放器. 注意事项: 该播放器只支持 mp3 格 ...
- iOS开发拓展篇—音频处理(音乐播放器2)
iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 ...
- Android实现简单音乐播放器(MediaPlayer)
Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能 ...
- 10个免费开源的JS音乐播放器插件
点这里 音乐播放器在网页设计中有时候会用到,比如一些时尚类.音乐或影视类等项目,但这些 网页播放器 插件比较少见,所以这里为大家整理一个集合,也许会有用到的时候. 下面整理的播放器有些是支持自适应的, ...
- 一个开源音乐播放器,低仿QQ音乐!
有暇,弄了个音乐播放器,页面效果整体上参考了QQ音乐,相关API使用了易源数据提供的相关接口(https://www.showapi.com/api/lookPoint/213),在此表示感谢.先来看 ...
- Android开发之音乐播放器的实现
Android音乐播放器 使用到Android的Actiivity和Service组件 播放音频的代码应该运行在服务中,定义一个播放服务MusicService,服务里定义play.stop.paus ...
随机推荐
- 有些arp请求报文中为什么会有目的mac地址(不使用广播地址)
有些arp请求报文中为什么会有目的mac地址(不使用广播地址) 最近做实验,注意到局域网内大部分的arp包的以太网头部目的mac地址并不是广播地址,并且包内的目的mac地址字段并不是全0,而是目的ip ...
- 全易通人事考勤工资验厂管理系统软件创建连接SQL2000数据库的操作方法和说明
全易通人事考勤工资验厂管理系统软件创建连接SQL2000数据库的操作方法和说明.全易通人事考勤工资验厂管理系统软件,有2种数据库,一个是ACCESS,另一个是SQL.不过由于ACCESS数据库比较小, ...
- c++ STL stack & queue
Stack 主要的方法有如下: empty() 堆栈为空则返回真 pop() 移除栈顶元素(不会返回栈顶元素的值) push() 在 ...
- UEditor上传图片到七牛C#(后端实现)
由于个人网站空间存储有所以选择将图片统一存储到七牛上,理由很简单 1 免费10G 的容量 ,对个人网站足够用 2 规范的开发者文档 和完善的sdk(几乎所有热门语言sdk) 整体思路 图片上传七 ...
- 也许是目前实现最好的js模拟滚动插件
finger-mover 是一个集成 Fingerd(移动端以手指为单位的事件管理方案) 和 Moved(微型运动方案) 为一体的移动端动效平台,finger-mover 本身并不能为你做什么,但是附 ...
- Visual Studio 2017 针对移动开发的新特性介绍
欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~ Visual Studio是世界上最好的IDE之一,如果是 .NET世界,那就没有之一了(^_^),而最近推出的Visual S ...
- 升讯威微信营销系统开发实践:(5) Github 源码:微信接口的 .NET 封装。
微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 本系列教程的最终目标是完成一个功能完善并达到高可用性能指标的微信管理软件,所以除了与微信本 ...
- bash下. : () {} [] [[]] (())的解释 (非原创,侵删)
Copy from http://blog.chinaunix.net/uid-20380484-id-1692999.html bash下有很多像{}.[]等一些符号命令,下面是我对一些常用的符号命 ...
- JavaScript基础(.....持续待更)
javascript热身 一.你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. 3. ...
- 日志组件二:log4j2
一.背景 随着业务服务(Server App)逐渐增加,我们的业务系统中的日志输出面临的问题越来越多,高并发下对磁盘io这块消耗的越来越大,因此,急需要一个高性能且最好能够支持异步输出日志的日志框架, ...