தொகுதி பாடங்கள் (4/5)
சரங்கள், பைட்டுகள் மற்றும் ரூன்கள்
Go இல் string என்பது மாறாத பைட்டுகளின் வரிசையாகும். சரம் எழுத்துக்கள்
UTF-8 இல் குறியாக்கம் செய்யப்பட்டுள்ளன. rune என்பது int32 மற்றும்
ஒற்றை யூனிகோட் குறியீட்டு புள்ளி ஐ குறிக்கிறது.
பைட்டுகள் மற்றும் ரன்களுக்கு இடையிலான வேறுபாட்டைப் புரிந்துகொள்வது அவசியம் ஒரு சரத்தில் உச்சரிப்புகள், ஈமோஜிகள், ஐடியோகிராம்கள் அல்லது ஏதேனும் இருந்தால் பிழைகளைத் தவிர்க்கவும் ASCII அல்லாத எழுத்து.
string = பைட்டுகள், எழுத்துகள் அல்ல
s := "ciaò"
fmt.Println(len(s)) // 5 — not 4!
fmt.Println(s[0]) // 99 ('c' as a byte)
fmt.Println(s[3]) // 195 (first byte of 'ò' in UTF-8)len(s) பைட்டுகளின் எண்ணிக்கையை வழங்குகிறது, புலப்படும் எழுத்துகள் அல்ல.
s[i] ஐ அட்டவணைப்படுத்துவது ஐ-வது பைட்டை (uint8) வழங்குகிறது, இது எழுத்துக்குறி அல்ல.
for range ரன்களை மீண்டும் செய்கிறது
for i, r := range s விமானத்தில் UTF-8 ஐ டிகோட் செய்கிறது: i என்பது பைட்-ஆஃப்செட்
ரூனின் தொடக்கத்தில், r என்பது ரூன் (int32):
s := "ciaò"
for i, r := range s {
fmt.Printf("%d %c (U+%04X)\n", i, r, r)
}
// 0 c (U+0063)
// 1 i (U+0069)
// 2 a (U+0061)
// 3 ò (U+00F2) <- starts at byte 3, takes 2 bytes[]rune(s): ஒவ்வொரு எழுத்துக்கும் அட்டவணைப்படுத்தல்
வெளிப்படையான மாற்றம்: ரன்களின் புதிய ஸ்லைஸை ஒதுக்குகிறது. விலை அதிகம் ஆனால் சில நேரங்களில் அவசியம்:
runes := []rune("ciaò")
fmt.Println(len(runes)) // 4
fmt.Println(string(runes[3])) // òstring(runes) என்பது தலைகீழ் மாற்றம்: []rune எடுத்து உற்பத்தி செய்கிறது
ஒரு UTF-8 சரம்.
சரங்கள் மாறாதவை
s := "ciao"
// s[0] = 'C' // ERROR: cannot assign to s[0]மாற்ற, []byte அல்லது []rune க்கு மாற்றவும், இயக்கவும், மீண்டும் மாற்றவும்:
b := []byte(s)
b[0] = 'C'
s = string(b) // "Ciao"இணைத்தல்
+ ஆபரேட்டர் வேலை செய்கிறது, ஆனால் லூப் பயன்பாட்டில் பல இணைப்புகளுக்கு
strings.Builder (மிகவும் திறமையானது, இடைநிலை ஒதுக்கீடுகளைத் தவிர்க்கிறது):
var sb strings.Builder
for i := 0; i < 5; i++ {
sb.WriteString("ab")
}
fmt.Println(sb.String()) // "ababababab"பயனுள்ள தொகுப்புகள்
strings:Contains,HasPrefix,Split,Join,ToUpper, __INLINE_26...strconv:Atoi,Itoa,ParseFloat,FormatInt...unicode:IsLetter,IsDigit,ToUpper...unicode/utf8:RuneCountInString(len([]rune(s))க்கு மாற்று).
முயற்சி செய்து பாருங்கள்
%d %c ஐப் பயன்படுத்தி சரத்தை வரம்பு மற்றும் அச்சு அட்டவணை மற்றும் ரூன் மூலம் மீண்டும் செய்யவும்.
குறிப்பைக் காட்டு
ஒரு சரத்தின் மீதான வரம்பு பைட்-ஆஃப்செட் + ரூன் திரும்பும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
s ஐ []ரூனாக மாற்றி அதன் நீளத்தை எழுத்துக்களில் அச்சிடவும்.
குறிப்பைக் காட்டு
வெளிப்படையான மாற்றம்: `[]ரூன்(கள்)`.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
லென்("ciaò") என்றால் என்ன?
s := "ciaò"
fmt.Println(len(s))மறுபரிசீலனை
string= மாறாத பைட்டுகளின் வரிசை, UTF-8 குறியிடப்பட்டது.len(s)= பைட்டுகள்;s[i]= i-th பைட் (uint8).for i, r := range sரன்களை டிகோட் செய்கிறது;iஎன்பது பைட்-ஆஃப்செட்.[]rune(s)எழுத்தின்படி அட்டவணைப்படுத்த (செலவு, ஒதுக்கீடு).- மாற்ற:
[]byteஅல்லது[]runeவழியாகச் செல்லவும். - லூப்பில் இணைக்க:
strings.Builder. - முக்கிய தொகுப்புகள்:
strings,strconv,unicode,unicode/utf8.