Sobes.tech
Junior — Middle

Slice узундугун анын чын өлчөмүнө айландыруу кантип болот?

sobes.tech AI

AIден жооп

Go тилиде, слайс — бул структура, ал төмөнкүлөрдү камтыйт:

  • массивге көрсөткүч,
  • узундук (len),
  • сыйымдылык (cap).

Слайстын узундугу — ал камтыган элементтердин саны, ал эми чындыкта эс тутумдагы өлчөмү сыйымдылыкка жана элементтердин түрүнүн өлчөмүнө көз каранды.

Мисалы, эгерде сизде int түрүндөгү слайс болсо (жалпысынан 8 байт ар бир элементке), узундугу 5 жана сыйымдылығы 10 болсо, анда эс тутумда 10 элемент үчүн орун бөлүнгөн (80 байт), бирок узундугу — 5.

Эс тутумдагы слайстын өлчөмү = sizeof(элемент) * cap.

Демонстрация коду:

package main
import (
    "fmt"
    "unsafe"
)
func main() {
    s := make([]int, 5, 10)
    fmt.Println("len:", len(s))
    fmt.Println("cap:", cap(s))
    fmt.Println("size in bytes:", unsafe.Sizeof(s[0])*uintptr(cap(s)))
}