manager.go

    1. /**
    2. @author CuiZhouwei
    3. @date 2022/7/28
    4. **/
    5. package library
    6. import (
    7. "errors"
    8. "fmt"
    9. )
    10. type Music struct {
    11. Id string
    12. Name string
    13. Artist string
    14. Source string
    15. Type string
    16. }
    17. type MusicManager struct {
    18. musics []Music
    19. }
    20. func NewMusicManager() *MusicManager {
    21. return &MusicManager{
    22. musics: make([]Music, 0),
    23. }
    24. }
    25. func (m *MusicManager) Len() int {
    26. return len(m.musics)
    27. }
    28. func (m *MusicManager) Get(index int) (music *Music, err error) {
    29. if index < 0 || index >= len(m.musics) {
    30. return nil, errors.New("index out of range ")
    31. }
    32. return &m.musics[index], nil
    33. }
    34. func (m *MusicManager) Find(name string) (int, *Music) {
    35. if len(m.musics) == 0 {
    36. return 0, nil
    37. }
    38. for k, music := range m.musics {
    39. if music.Name == name {
    40. return k, &music
    41. }
    42. }
    43. return 0, nil
    44. }
    45. func (m *MusicManager) Add(music *Music) {
    46. m.musics = append(m.musics, *music)
    47. }
    48. func (m *MusicManager) Remove(index int) *Music {
    49. if index < 0 || index >= len(m.musics) {
    50. fmt.Println("请重新选择删除的序号..")
    51. return nil
    52. }
    53. removeMusic := &m.musics[index]
    54. fmt.Printf("remove %s music already\n", removeMusic.Name)
    55. if index < len(m.musics)-1 {
    56. m.musics = append(m.musics[:index], m.musics[index+1:]...)
    57. } else if index == 0 {
    58. m.musics = m.musics[0:0] //make([]music,0)
    59. } else {
    60. m.musics = m.musics[:index]
    61. }
    62. return removeMusic
    63. }
    64. func (m *MusicManager) RemoveByName(name string) *Music {
    65. if len(m.musics) == 0 {
    66. return nil
    67. }
    68. index, music := m.Find(name)
    69. if music == nil {
    70. fmt.Printf("ths music %s did`t find", name)
    71. }
    72. m.Remove(index)
    73. return nil
    74. }

    manager_test.go

    1. /**
    2. @author CuiZhouwei
    3. @date 2022/7/29
    4. **/
    5. package library
    6. import (
    7. "testing"
    8. )
    9. func TestOps(t *testing.T) {
    10. mm := NewMusicManager()
    11. if mm == nil {
    12. t.Error("NewMusicManager failed")
    13. }
    14. if mm.Len() != 0{
    15. t.Error("NewMusicManager falied,not empty.")
    16. }
    17. m0 := &Music{
    18. Id: "1",
    19. Name: "Take me to you heart",
    20. Artist: "Mike",
    21. Source: "http://qbox.me/2450123",
    22. Type: "MP3",
    23. }
    24. m1 := &Music{
    25. Id: "1",
    26. Name: "Take me to you heart",
    27. Artist: "Mike",
    28. Source: "http://qbox.me/2450123",
    29. Type: "MP3",
    30. }
    31. mm.Add(m0)
    32. mm.Add(m1)
    33. if mm.Len() != 2{
    34. t.Error("MusicManager.Add() failed.")
    35. }
    36. _,m := mm.Find(m0.Name)
    37. if m== nil{
    38. t.Error("MusicManager.Find().")
    39. }
    40. if m.Id != m0.Id||m.Artist != m0.Artist ||
    41. m.Type != m0.Type || m.Name != m0.Name ||m.Source != m0.Source{
    42. t.Error("MusicManager.Find() failed.Found item mismatch.")
    43. }
    44. m ,err:= mm.Get(0)
    45. if m== nil {
    46. t.Error("MusicManger.Get() failed.",err)
    47. }
    48. m = mm.Remove(0)
    49. if m == nil || mm.Len() != 1 {
    50. t.Error("musicmanager.Remove failed.",err)
    51. }
    52. m = mm.RemoveByName(m0.Name)
    53. if m == nil || mm.Len() != 0 {
    54. t.Error("musicmanager.Remove failed.",err)
    55. }
    56. }