前言:
前面敲了那么多,其实并没有什么帮助,一切以实践为主,有一些东西,理解是需要很长时间的,我们要先熟悉再了解。这一篇是完成一个音乐播放器程序(流程).PS:非原创教程,来自于《Go语言编程》,我只是照着边理解边整理。
(1)音乐库功能,使用者可以查看,添加和删除里面的音乐曲目;
(2)播放音乐;
(3)支持mp3和WAV,当然也可以扩展其他音乐类型
正文:
音乐库:
我们首先定义音乐库需要的信息(结构体)
type Music struct{ Id string Name string Artist string Source string Type sting }
接下来实现这个音乐库的管理,用一个切片数组用作基础储存结构。
其他操作都是对这个数组切片的包装。
package library import "errors" type Music struct { Id string Name string Artist string Source string Type string } type MusicManager struct { musics []MusicEntry } func NewMusicManager() *MusicManager { return &MusicManager{make([]MusicEntry, 0)} } func (m *MusicManager) len() int { return len(m.musics) } func (m *MusicManager) Get(index int) (music *MusicEntry, err error) { if index < 0 || index >= len(m.musics) { return nil, errors.New("Index out of range .") } return &m.musics[index], nil } //查找歌曲 func (m *MusicManager) Find(name string) *MusicEntry { if len(m.musics) == 0 { return nil } for _, m := range m.musics { if m.Name == name { return &m } } return nil } //增加歌曲 func (m *MusicManager) Add(music *MusicEntry) { m.musics = append(m.musics, *music) } //移除歌曲 func (m *MusicManager) Remove(index int) *MusicEntry { if index < 0 || index >= len(m.musics) { return nil } removedMusic := &m.music[index] //从数组切片中删除元素 if index < len(m.musics)-1 { //中间元素 m.musics = append(m.musics[:index-1], m.musics[index+1:]...) } else if index == 0 { //删除仅有的一个元素 m.musics = make([]MusicEntry, 0) } else { m.musics = m.musics[:index-1] } return removedMusic }
//测试单元部分
package library import( "testing" ) func TestOps(t *testing.T){ mm := NewMusicManager() if mm==nil { t.Error("NewMusicManager failed .") } if mm.Len() != 0 { t.Error("NewMusicManager failed,not empty. ") } m0 :=&MusicEntry{ "1","My Heart Will Go On","Celion Dion",Pop,"http://qbox.me/262223",MP3 } mm.Add(m0) if mm.len() != 1{ t.Error("MusicManager.Add() failed .") } m :=mm.Find(m0.Name) if m == nil{ t.Error("MusicManager.Find() failed .") } if m.Id !=m0.Id || m.Artist!=m0.Artist ||m.Name != m0.Name || m.Source !=m0.Source ||m.Type!=m0.Type { t.Error("MusicManager.Find() failed Found item mismath.") } m,err := mm.Get(0) if m==Remove(0) if m==nil || mm.len()!=0 { t.Error("MusicManager.Remove() failed.",err) } }
之前,有点小坑写的例子没有跑起来,这次多谢同学帮助,给了我一份代码,看着撸。(PS:好别扭的感觉)。基本功能都能实现。这里我直接发源码连接了。
http://note.youdao.com/yws/public/redirect/share?id=8eca721947f6eceb755946c328953014&type=true