Sobes.tech
Junior — Middle

Программалоо тилинде функцияга өткөрүлүүчү кесимдин өлчөмүн кантип көбөйтүү керек?

sobes.tech AI

AIден жооп

Go тилинде, кесим (slice) — массивке ишара кылган көрсөткүчтү, узундугун жана сыйымдуулугун камтыган структура. Эгер функцияга өткөрүлгөн кесимдин өлчөмүн көбөйтүүнү кааласаңыз, төмөнкүлөрдү жасай аласыз:

  • Кесимди мааниси менен өткөрүп бериңиз, бирок функциянын ичинде append функциясын колдонуп, узундуусу же сыйымдуулугу көбөйтүлгөн жаңы кесим түзүңүз.
  • Эгер өзүңүздүн кесимди өзгөртүүнү (мисалы, узундугун көбөйтүү) жана өзгөртүүлөрдүн сырттан көрүнүшүн кааласаңыз, көрсөткүчтү (*[]T) өткөрүп берсеңиз болот, андан кийин функциянын ичинде кесимди кайра аныктай аласыз.

Мисал, функциянын ичинде жаңы кесимди кайтарып, кеңейтүү:

func extendSlice(s []int, n int) []int {
    // 0 элементтерди кошуу
    s = append(s, make([]int, n)...) 
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = extendSlice(s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Эгер функция кесимди өзгөртүп, кайтарбастан иштөө керек болсо, көрсөткүчтү колдонсоңуз болот:

func extendSlicePtr(s *[]int, n int) {
    *s = append(*s, make([]int, n)...) 
}

func main() {
    s := []int{1, 2, 3}
    extendSlicePtr(&s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Ошентип, функциянын ичинде кесимдин өлчөмүн көбөйтүү үчүн, жаңы кесим кайтаруу же көрсөткүчтү берүү керек.