Skip to content
This repository has been archived by the owner on Apr 7, 2023. It is now read-only.

Lecture 02 improvements #20

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions 02-funcs_and_pointers.slide
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@ http://fmi.golang.bg/

* Въпрос за мъфин #1

Възможно ли е да използвам go1.11 за да компилирам програма от 2012г.? Защо?
Възможно ли е да използвам go1.11, за да компилирам програма от 2012г.? Защо?

- Да
- [[https://golang.org/doc/go1compat][go1compat гаранция]]

* Въпрос за мъфин #2

Какъв тип връша main функцията?
Какъв тип връща main функцията?

- Не връща нищо


* Въпрос за мъфин #3

Можем ли да дефинираме променлива без да пишем тима излишно?
Можем ли да дефинираме променлива без да пишем типа излишно?

Да - чрез [[https://tour.golang.org/basics/14][type inference]]

Expand Down Expand Up @@ -62,7 +62,7 @@ http://fmi.golang.bg/
Мъфините съдържат

- Мляко, яйца, лешници, какао, шоколад, захар, брашно, слънчогледово олио
- Абе, всичко към което е възможно да сте алергични
- Абе, всичко, към което е възможно да сте алергични
- Моля, не се наранявайте с тях!

* ... и няколко неща, които пропуснахме
Expand Down Expand Up @@ -139,9 +139,9 @@ note: Не сме секта.

Извикваме я с колкото ни трябват

sum() //0
sum(2, 3) //5
sum(2, 3, 4, 5) //14
sum() // 0
sum(2, 3) // 5
sum(2, 3, 4, 5) // 14

Трябва да е последния аргумент на функцията
* Следващия път ще говорим по-подробно за `range`
Expand Down Expand Up @@ -287,7 +287,7 @@ note: Не сме секта.

* Доуточнения

- `defer` statement-ите ни позволяват да мислим за затварянето на файловете веднага след отварянето им
- `defer` statement-ите ни позволяват да мислим за затварянето на ресурси веднага след отварянето им
- Това ни гарантира, че няма да забравим в никой случай за затварянето им, независимо кой, кога и как променя кода след нас

* Три прости правила за defer (1)
Expand Down Expand Up @@ -357,15 +357,15 @@ note: Не сме секта.
- Имаме тип указател: `*int`
- Указателите са с константна големина
- Указател може да сочи към указател
- В Go една стойност се изчиства от паметта когато няма указатели към нея
- В Go една стойност се изчиства от паметта, когато няма указатели към нея
- Не можем да имаме указатели към константи
- Очевидно `intP`==`*(&intP)`

* Пример

.play code/funcs_and_pointers/pointers.go

* Как да си направим дупка в крака?
* Как да се застреляме в крака?

.play code/funcs_and_pointers/broken_pointer.go

Expand All @@ -378,6 +378,6 @@ note: Не сме секта.
Демек `a` бива копиран в скоупа на `foo`, а `b` просто сочи към някаква стойност отвън.

- `b` не се копира. Ако в него има около 652183859 символа*, това е предимство
- Каквото и да правим с `a` не влияе на нищо извън тази функция
- Каквото и да направим с `b` променяме оригиналната стойност
- Каквото и да правим с `a`, не влияем на нищо извън тази функция
- Каквото и да направим с `b`, оригиналната стойност би се променила
_*Следващия_път_ще_видим_защо_указател_към_string_може_да_не_ни_спести_кой-знае_колко_памет_