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. }