建议大家使用FireFox、Opera、Safri、IE8+等主流浏览器访问本站,否则可能会出现不兼容等问题!

Golang //学习笔记 面向对象编程(三)

Golang 凶恶的方块 2841次浏览 已收录 1个评论

前言:

前面敲了那么多,其实并没有什么帮助,一切以实践为主,有一些东西,理解是需要很长时间的,我们要先熟悉再了解。这一篇是完成一个音乐播放器程序(流程).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

 


方块网络 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Golang //学习笔记 面向对象编程(三)
喜欢 (0)or分享 (0)
avatar
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. avatar
    群主狗逼
    geemo2016-07-28 16:30 回复 Windows 7 | Chrome 51.0.2704.106