முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 4 · பாடம் 1 இன் 5பாடத்திட்டத்தில் 16/50~8 min
தொகுதி பாடங்கள் (1/5)

நிலையான நீள வரிசைகள்

Go இல் வரிசை ஒரு நிலையான நீளத்தைக் கொண்டுள்ளது, அதன் வகையாக சுடப்பட்டது: [N]T. இது பயன்பாட்டுக் குறியீட்டில் அரிதாகவே நேரடியாகப் பயன்படுத்தப்படும் ஒரு பழமையானது - நீங்கள் செய்வீர்கள் கிட்டத்தட்ட எப்போதும் துண்டுகள் (அடுத்த பாடம்), அவை மாறும் வரிசைகள் மீது பார்வைகள்.

இருப்பினும், வரிசைகளை நன்கு புரிந்துகொள்வது அவசியம்: Go இல் உள்ள அனைத்தும் கட்டமைக்கப்பட்டுள்ளன அவர்கள் மேல்.

பிரகடனம் மற்றும் துவக்கம்

Go
var a [3]int = [3]int{10, 20, 30}
b := [3]int{1, 2, 3}            // inference with :=
c := [3]int{}                   // all zero: [0, 0, 0]
d := [...]int{1, 2, 3, 4}       // length inferred = 4

ஒரு அணிவரிசையின் பூஜ்ஜிய மதிப்பு என்பது ஒவ்வொன்றிலும் அறிவிக்கப்பட்ட நீளத்தின் வரிசையாகும் உறுப்பு அதன் பூஜ்ஜிய மதிப்பில்:

Go
var nums [5]int  // [0 0 0 0 0]

அட்டவணைப்படுத்துதல் மற்றும் len

Go
a := [3]int{10, 20, 30}
fmt.Println(a[0])      // 10
a[1] = 99
fmt.Println(len(a))    // 3

எல்லைக்கு வெளியே அணுகல் இயக்க நேர பீதியை ஏற்படுத்துகிறது (அமைதியாக வரையறுக்கப்படாதது அல்ல C இல் உள்ளதைப் போல).

நீளம் வகையின் ஒரு பகுதியாகும்

Go
var a [3]int
var b [4]int
// a = b   // ERROR: different types

[3]int மற்றும் [4]int ஆகியவை தனிப்பட்ட வகைகளாகும், இரண்டுமே வைத்திருந்தாலும் int. இதனால்தான் வரிசைகள் செயல்பாடுகளுக்கு எப்போதாவது அனுப்பப்படுகின்றன: நீங்கள் செய்ய வேண்டும் அளவுரு வகைக்கு நீளத்தை கடின குறியீடு.

மதிப்பின்படி நகலெடுக்கவும்

துண்டுகள் (குறிப்பு) மற்றும் வரைபடங்கள் (குறிப்பு) போலல்லாமல், வரிசைகள் ** மூலம் நகலெடுக்கப்படுகின்றன மதிப்பு**:

Go
a := [3]int{1, 2, 3}
b := a               // copy
b[0] = 99
fmt.Println(a[0])    // 1 — a is unchanged

ஒரு செயல்பாட்டிற்கு செல்லும் போது இது பொருந்தும்: செயல்பாடு அதன் பெறுகிறது சொந்த நகல்.

வரிசைகளை எப்போது பயன்படுத்த வேண்டும்?

  • தொகுக்கும் நேரத்தில் அறியப்பட்ட நிலையான அளவு இடையகங்கள் (எ.கா. [16]byte MD5க்கு).
  • கூட்டு வரைபட விசைகள் (துண்டுகள் "ஒப்பிடக்கூடியவை" அல்ல, வரிசைகள்).
  • அதீத செயல்திறன் (மறைமுகம் இல்லை, கேச் நட்பு).

99% குறியீட்டிற்கு: துண்டுகளைப் பயன்படுத்தவும்.

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#go.m4.l1.e1
முயற்சிகள்: 0ஏற்றுகிறது…

10, 20, 30 மதிப்புகளுடன் 3 இன்ட்களின் வரிசையை அறிவித்து அதன் நீளத்தை அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

வரிசை எழுத்து: `[3]int{a, b, c}`.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

உடற்பயிற்சி#go.m4.l1.e2
முயற்சிகள்: 0ஏற்றுகிறது…

b ஐ 5 ints (அனைத்தும் பூஜ்ஜியம்) வரிசையாக அறிவித்து, 99ஐ நிலை 2க்கு ஒதுக்கவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

`var b [5]int` என்பது [0 0 0 0 0] எனத் தொடங்குகிறது.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

Quiz#go.m4.l1.e3
தயார்

[3]int மற்றும் [4]int ஒரே வகையா?

Go
var a [3]int
var b [4]int
// a = b ?
பதில் விருப்பங்கள்

மறுபரிசீலனை

  • [N]T: நிலையான நீளம், வகையின் ஒரு பகுதி.
  • பூஜ்ஜிய மதிப்பு: ஒவ்வொரு உறுப்பும் அதன் பூஜ்ஜிய மதிப்பில்.
  • [...]int{...} தொகுப்பி நீளத்தை ஊகிக்க உதவுகிறது.
  • மதிப்பின்படி நகலெடுக்கவும் (உள்ளே செயல்பாடுகள் உட்பட).
  • எல்லைக்கு வெளியே = பீதி, வரையறுக்கப்படவில்லை.
  • நடைமுறையில், ஸ்லைஸ்ஐப் பயன்படுத்தவும், அவை வரிசைகள் மீது பார்வைகளாகும்.