Herman
каналы конечно надо
Herman
микросервисы тоже хорошо, особенно в чем разница с монолитом
Herman
если про саги почитать, то могут и за умного принять
Anonymous
не
Anonymous
за джуна посчитают уже норм
Herman
да на самом деле вопросы рандомны
Herman
тако особо не угадаешь
Anonymous
ну вот я про тоже
Anonymous
типо ты потратишь фул свою жизнь на слайсы
Anonymous
а тебе попадется вопрос про число 42
Herman
так слайсы они конечны и кончаются очень быстро
Herman
быстрее каналов например
Anonymous
Herman
у каналов там аксиомы еще всякие знать надо
Herman
https://dave.cheney.net/tag/channels
Anonymous
лан пох
Anonymous
даже готовиться не буду
Anonymous
на своем скиле вывезу
Herman
Maks
короче слайс напоминает лист в шарпе к примеру, только у тебя есть ссылка на массив. И когда у тебя аппенд идет за границы массива, то у тебя внутри листа создается новый массив длиной х2, в него копируются значения старого массива и указатель в листе(тут это слайс) начинает указывать на новый массив.
Maks
Блин, понять сложнее чем объяснить)
Maks
:D
Anonymous
(cap(slice)+1)*2)
Anonymous
это если выходит за перделы
Maks
слайс это указатель на часть массива в определенных границах. То есть он может быть не с начала массива начинаться, заканчиваться не в конце массива. Это просто грубо говоря кусочек массива в виде ссылок.
Maks
пусть меня поправят
Herman
указатель на один элемент там
Herman
этот элемент не обязательно первый
Anonymous
test := [4]{1,2,3,4, 5}
slice := test[2:4]
slice[0] = 5
// slice = {5, 4}
// test = {1, 2, 5, 4, 5}
Anonymous
я с этого поржал
Anonymous
я готов :)
Anonymous
неа
Anonymous
если cap(slice) == 0
Anonymous
ну да я бы так ответил
Herman
то есть если cap был 3
Herman
мы добавляем элемент
Herman
то cap станет 8?
Anonymous
ну да....................
Herman
а ты попробуй
Herman
вот кто-то уже сделал красиво
Herman
https://go.dev/play/p/wbfQRzDojis
Anonymous
так мужики.
Anonymous
вы че меня путаете.
Anonymous
package main
import (
"fmt"
)
func main() {
slice := []int{1, 2, 3, 4}
fmt.Printf("old: length = %d, capacity = %d\n", len(slice), cap(slice))
slice = append(slice, 1)
fmt.Printf("new: length = %d, capacity = %d", len(slice), cap(slice))
}
OUTPUT:
old: length = 4, capacity = 4
new: length = 5, capacity = 8
Herman
этот cap который туда приходит, the desired new minimum capacity, это какой?
Herman
package main
import (
"fmt"
)
func main() {
slice := []int{1, 2, 3, 4}
fmt.Printf("old: length = %d, capacity = %d\n", len(slice), cap(slice))
slice = append(slice, 1)
fmt.Printf("new: length = %d, capacity = %d", len(slice), cap(slice))
}
OUTPUT:
old: length = 4, capacity = 4
new: length = 5, capacity = 8
ну так не (4+1)*2 а просто на 4 * 2
Anonymous
ну так я говорю же
Anonymous
если cap(slice) == 0 то тогда + 1
Herman
да, чет не подумал про несколько элементов сразу
Herman
https://go.dev/play/p/HX6jZujRifd а че 6 тогда
Herman
не дает дебажиить
Herman
как это понимать?
Herman
Got a connection, launched process /private/var/folders/vd/6z9b8nfn4gzbnqd_vf0r7p580000gn/T/GoLand/___go_build_main_go (pid = 50518).
2
6
Exiting.
Herman
это если в дебаге с точкой на growslice
Andrey
А зачем вам вообще знать, сколько было выделено? Ведь так куча факторов, от которых зависит выделение : тип данных, версия Го, архитекрута процессора и тд.
Главное понимать принцип, как это работает, а "предсказывать" сколько выделиться, это уже стрелять себе в ногу
Ivan
https://www.youtube.com/watch?v=pTwtcP5QglI
Ivan
30 мин ни о чем(
Ivan
это в поддержку всем кто пытается устроится джуном ) если уж такие доклады на конференциях
Anonymous
а да кста
Anonymous
что по докладам?
Anonymous
зачем их смотреть и с чем едят?
Anonymous
типо почему статейку не прочитать?
Anonymous
Это таймкиллеры, типо ты слушаешь умные доклады на фоне и понимаешь из всего потока разговора считаные проценты
Anonymous
когда джун
Anonymous
ок а где норм доклады найти?
Andrey
ну тогда, аппенд всегда выделяет память, с "запасом". Если ты будет пихать по одному элементу в слайс, он выделяет чаще всего cap*2, а если как тут (ты передаешь заранее известное количество элементов, то он выделит нужное + 1). Такое же поведение ты получишься, если передаешь слайс туда
Anonymous
Anonymous
разве не всегда *2 идет?
Slavyan
Всем привет!
Хотел вас спросить об одном моменте, который мне не понятен. У меня огромное желание развиваться и изучать язык программирования Go. Но! В программировании на данный момент полный ноль. Т.к др. сфера деятельности. Итак вопрос:
могу ли начать свой путь с языка Go?
Или нужно сначала освоить языки типо: Java/php/Python?
С одной стороны при опыте работы с одним из языков у меня были бы общие понятия о написании кода. С др. стороны, Go, как я понял достаточно лёгкий в изучении со своей системой и нюансами. Стоит ли изучать сначала др.языки или можно смело с нуля изучать Go?
Влад
Влад
Без этого в IT никак
Herman
как минимум в случае с 0, в случае с добавлением нескольких элементов и в случае превышения некого значения
Anonymous
странно, я добавлял несколько элементов капасити умножалась на два
Anonymous
а превышение это?
Herman
)))
Herman
https://go.dev/play/p/1Jadzg2QnYt
Herman
если добавить сначал 1, потом 3 , то капасити 12
Herman
если сразу 4, то 8