Shanraq.org Shanraq.org
Go-дағы айнымалылар мен типтер: string, int, float64, bool
IT

Go тілі: нөлден өз блогыңызға дейін 4-сабақ (барлығы 50)

Go-дағы айнымалылар мен типтер: string, int, float64, bool

Go курсының төртінші сабағы. Айнымалы деген не және тілге типтер не үшін керек: string, int, float64 және bool, := мен var арқылы жариялау, нөлдік мәндер және тип неге бір рет таңдалады. Бірінші күні кездесетін declared and not used қатесін және атау ережелерін талдаймыз.

Не үшін керек

Сіздің серверіңіз бәріне бірдей жауап береді. Әртүрлі жауап беру үшін — оқырманның аты, мақала тақырыбы, қаралым саны — бағдарлама мәндерді бір жерде ұстауы керек. Мән тұратын орынды айнымалы дейді.

Ал Go әрқашан сол мәннің қандай түрге жататынын сұрайды: мәтін бе, сан ба, «иә-жоқ» па. Оны тип дейді. Тіл сол арқылы бағдарлама іске қосылмай тұрып-ақ бір топ қатені ұстап қалады.

Бірден тұтас

Жаңа қалта, go mod init sabaq03, main.go файлы:

package main

import "fmt"

func main() {
	title := "Сәлем, әлем!"
	views := 0
	rating := 4.5
	published := true

	views = views + 1

	fmt.Println(title)
	fmt.Println("Қаралым:", views)
	fmt.Println("Баға:", rating)
	fmt.Println("Жарияланған:", published)
}

Іске қоспас бұрын — төменге қарамай, оның не басып шығаратынын дауыстап айтыңыз. Содан кейін жіберіп, салыстырыңыз: айырма шыққан жер — тілді әлі білмейтін тұсыңыз.

go run . мынаны басады:

Сәлем, әлем!
Қаралым: 1
Баға: 4.5
Жарияланған: true

Төрт айнымалы — бұл болашақ блогыңыздағы мақала карточкасының өзі дерлік.

Талдау

Айнымалы — мәннің аты

Жазуы бар қорап. views — 0 деген сан емес, қазір артында 0 тұрған ат. Бір жолдан кейін онда 1 тұрады.

Елестетіп көріңіз. Сөредегі жазуы бар қорап. «Қаралым» деген жазу өзгермейді, ал ішіндегісі қалаған кезде өзгереді. Сіз «нөлді әкел» демейсіз, «қаралымды әкел» дейсіз.

:= жариялап, бірден мән салады

title := "Сәлем, әлем!" дегенді «title деген ат ашып, ішіне осы жолды сал» деп оқыңыз.

Типті біз ешжерде жазған жоқпыз. Go оң жақта не тұрғанын көріп, өзі түсінді — мұны типті шығару дейді. Оң жақта тырнақшадағы мәтін тұр, демек title — жол.

Елестетіп көріңіз. := — жаңа қорап алып, оған жазу жазу. = — сөреде тұрған, жазуы бар қорапқа зат салу. Бір қорапты екі рет жазудың қажеті жоқ.

:= белгісі ат бірінші рет пайда болғанда ғана жұмыс істейді. Әрі қарай кәдімгі =:

views = views + 1

Мұны теңдеу емес, бұйрық деп оқыңыз: views ішінде тұрғанды ал, бірді қос, кері сал. Математикада мұндай жазу дұрыс болмас еді, бағдарламалауда бұл — қалыпты жағдай.

Әзірге жететін төрт тип

  • string — мәтін: тақырып, ат, мекенжай. Қос тырнақшаға алынады.
  • int — бүтін сан: қаралым, пікір саны.
  • float64 — бөлшегі бар сан: 4.5 деген баға, бой, температура. Бөлгіші — нүкте, үтір емес. Ақшаны олай сақтамайды: float64 шамамен санайды, әрі тиындар уақыт өте ажырап кетеді. Ақша үшін ең ұсақ бірліктің — тиынның — бүтін санын не бөлек ондық типті алады.
  • bool — тек true не false: жарияланды ма, жоқ па.

Осы кірістірілген типтердің аттары кіші әріппен жазылады. Өзіңіз жасайтын типтерде бірінші әріптің регистрі басқа нәрсені білдіреді — ат пакеттен тыс көріне ме, жоқ па; оған құрылымдар туралы сабақта жетеміз.

Елестетіп көріңіз. Тип — қораптың пішіні. Аяқкиім қорабына тоңазытқыш сыймайды, және бұл жақсы: сәйкессіздік қоймада көрінеді, сатып алушының үйінде емес.

var — мән әлі жоқ кезде

Айнымалы керек, ал не саларыңызды кейін білетін кез болады:

var author string
var count int
var ok bool

Мұнда типті өзіңіз атауға тура келді — шығаратын ештеңе жоқ. Go ондай айнымалыға өз типінің нөлдік мәнін салады: жолға "", санға 0, bool-ға false.

Бұл көрінгеннен маңыздырақ. Go-да «ішінде не бар екені белгісіз» айнымалы болмайды: ол әрқашан бірдеңемен толы. Басқа тілдерде сүрінетін бір топ қате мұнда тіпті пайда болмайды.

Елестетіп көріңіз. Бос стақан — бұл бос стақан, «не екені белгісіз» емес. Оны алуға, жарыққа қарауға, ішіне құюға болады. Кейбір тілдерде оның орнында «стақан бар ма өзі, белгісіз» тұрады, соған сүрінеді.

const — ешқашан өзгермейтін нәрсе

Керісінше де болады: мән алдын ала белгілі әрі өзгермеуге тиіс. Тақырып ұзындығының шегі, сайттың мекенжайы, күйлердің аттары. Ондай үшін const бар:

const maxTitle = 80
const site = "shanraq.org"

const (
	draft = iota
	review
	published
)

func main() {
	fmt.Println("тақырып шегі:", maxTitle)
	fmt.Println("сайт:", site)
	fmt.Println("күйлер:", draft, review, published)
}
тақырып шегі: 80
сайт: shanraq.org
күйлер: 0 1 2

Айнымалыдан айырмашылығы біреу, әрі ол қатаң. Тұрақтыны өзгертіп көріңіз — бағдарлама жиналмайды:

cannot assign to maxTitle (neither addressable nor a map index expression)

Жақшаның ішіндегі iota — нөлден басталып, әр жолда бірге өсетін санауыш. Ол күй бірнешеу болғанда керек, әрі маңыздысы сандардың өзі емес, олардың әртүрлі болуы: кодта 0, 1, 2 емес, draft, review, published тұрады — бір айдан кейін екіліктің нені білдіргенін ешкім еске түсіре алмайды.

Тағы бір ереже: тұрақтының мәні жұмыс кезінде емес, жинау кезінде белгілі болуға тиіс. Осыдан алдын ала көрген жөн екінші қате шығады:

var author = "Дәулет"

const site = author
author (variable of type string) is not constant

Айнымалыны өзгертуге болады, демек оның мәні іске қосылғанға дейін белгісіз — ол тұрақтыға жарамайды.

Елестетіп көріңіз. Қарындашпен қойылған белгі емес, мөр. Белгіні түзетеді, мөрді — жоқ: оны бір рет ойып жасаған, әрі ол бұдан былай бәрінде бірдей.

Ереже қарапайым: мән кодқа қолмен жазылса әрі өзгермеуге тиіс болса, const жазыңыз. Код бойынша төрт жерге шашылған 80 саны бір күні үшеуінде ғана өзгереді.

Тип бір рет таңдалады және өзгермейді

views бүтін сан деп жарияланған, енді оған мәтін салынбайды:

views = "көп"

Go бағдарламаны жинаудан бас тартып, шамамен былай дейді:

cannot use "көп" (untyped string constant) as int value in assignment

Бұл тілдің кінәратшылдығы емес. Жинақтау кезінде ұсталған қате сізге бір минутқа түседі. Дәл сол қатені жұмыс істеп тұрған блогтан оқырман тапса, бағасы мүлде басқа.

Бүгін кездесетін қате

Айнымалыны жариялап, қолданбаңыз — Go бағдарламаны жинамайды:

declared and not used: author

Кез келген басқа тіл дерлік үндемес еді. Go қолданылмаған айнымалыны қоқыс санайды да, әрі жібермейді.

Шешімі екі түрлі: не қолданыңыз, не алып тастаңыз. Дәл бір апта ашуландырады, сосын бағалай бастайсыз.

Айнымалыны қалай атау керек

Латынмен, бос орынсыз. Бірнеше сөзді біріктіріп жазады, әрқайсысының басы бас әріппен: articleTitle, viewsCount. Мұны camelCase дейді, Go-да солай қабылданған.

Елестетіп көріңіз. Шкафтағы қалталарды солай жазады. «қ1» емес, «Жалдау шарттары 2026» — бір жылдан кейін шкафты ашып, бірден табу үшін.

Ат ішінде не бар екенін айтуы керек. t дегенді бір аптадан кейін есіңізге түсіре алмайсыз, title дегенді әрқашан түсінесіз.

Сабақ картасы

Сабақ картасы: төрт тип және типтің бір рет таңдалатыны

Өз сөзіңізбен айтыңыз

Қарамай, дауыстап немесе қағазға жазып жауап беріңіз. Жауаптары — сабақтың соңында.

  1. := мен = айырмашылығы неде?
  2. var price float64 деп жазып, ішіне ештеңе салмадыңыз. price ішінде не тұр?
  3. Қолданылмаған айнымалы ешкімге кедергі келтірмесе де, Go неге бағдарламаны жинаудан бас тартады?

Тапсырма

Міндетті. Болашақ мақалаңыздың карточкасын жинаңыз: төрт айнымалы, өз мәндерімен, және оларды терминалға шығару.

Қалауыңызша.

  • int типті айнымалыға жол салып көріңіз де, хабарламаны толық оқыңыз. Бұл қатені әдейі бір рет көру пайдалы, кейін бетінен танисыз.
  • Айнымалы жариялап, қолданбаңыз. Go бағдарламаны жинамағанына көз жеткізіңіз.
  • Жариялаудың бірін := орнына нақты типі бар var-ға ауыстырыңыз. Нәтиже сол күйінде қалуы керек.

Шықпай қалса. go: cannot find main module не go.mod file not found — сіз go.mod жоқ қалтадасыз: сол жерде go mod init sabaq03 орындаңыз. undefined: fmtimport "fmt" жолы жоқ; Go кеңейтімі тұрса, редактор оны сақтағанда өзі жазады. Ал declared and not used — бұл ақау емес, жоғарыдағы бөлімдегі әңгіме.

Блогта қайда тұрады

Осы төрт айнымалы — болашақ мақалаңыздың өрістері. Құрылымдар туралы сабақта біз оларды бірге жүрсін деп бір Article типіне жинаймыз, ал CRUD туралы сабақта олар дерекқорға барып, қайта оралады.

Жауаптар

Жауаптарды көрсету
  1. := жаңа ат ашып, оған бірден мән береді, ал типті Go өзі анықтайды. = бұрыннан бар атқа мән салады. Сол атпен := қайталауға болады — бірақ сол жақта кемінде бір жаңа ат болса ғана: сонда ескісі жай жаңа мән алады.
  2. Нөл. Go-да әр типтің нөлдік мәні бар: сандарда 0, жолдарда "", bool-да false. Кейбір тілдердегідей «ішінде не бары белгісіз» айнымалы мұнда болмайды.
  3. Себебі қолданылмаған айнымалы — әрдайым дерлік қатенің ізі: бірдеңені есептеп, қолдануды ұмытқансыз немесе төмендегі атта қате жазғансыз. Go оның оқырманға дейін жетуіне жол бермей, сізді дәл қазір тоқтатқанды жөн көреді.

Дереккөздер

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Тапсырманы тексеру

Алдымен VS Code-та шешіп, іске қосыңыз — редактор қатені сол жерде көрсетеді. Дайын шешімді осында қойыңыз. Тексеретін — модель: ол қатені атап көрсетеді, бірақ дайын жауапты бермейді.

Тексеру үшін кіру керек. Кіру

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.