Комментарии 5
Уж было хотел назвать автора последними и предпоследними словами, а статье его и нейронке её писавшей объявить "изыди" и, заодно, ткнуть мордой в документацию, но увы... В принципе, ткнуть можно, на go.dev/doc есть ссылка Go Slices: usage and internals, спрятана она в секции Language блока Codewalks и покрывает эту статью сто раз как бык овцу. Беда в том, что мне просто повезло. И беда в том, что это ссылка на блог. Вдумайтесь - документацией по Go является сборище блогов, то есть одна баба сказала. Это что такое вообще, если не выбор между саботажем и катастрофой?
На go.dev/doc есть ссылка на спецификацию языка, но она достаточно формальна чтобы быть неудобной для чтения и непригодной для обучения. Ау, люди - я один (смутно) помню, что описание языка совсем недавно было на сайте и были сэндвичи меню с общим и локальным содержаниями? Я помню, что познакомившись с Go отнёс его к хорошо документированным языкам, типа Rust или Dart, для чего абсолютно необходим связный текст, который можно было (рекомендовать) прочитать от начала и до конца и узнать о Go, как о языке, всё. Значит он там был? Not any more, или я чего-то не вижу в упор?
По поводу статьи и слайсов достаточно сказать, что в Go параметры передаются по значению, то есть копируются, но копирование не глубокое. чем вся эта ерунда и исчерпывается. И да, со слайсами слайсов полезно поиграть, непременно иногда добавляя в слайс новые элементы, и понять - лучше этим не заниматься.
Зачем вы меня так обижаете? :(
Это моя первая статья и писал я её я, а не нейронка. Я сидел и искал материалы разных менторов(что бы выбрать задачи и их объяснить). Основной посыл статьи во первых самому убедиться в своих знаниях, а во вторых дать возможность порешать задачки на понимание темы. Документация есть и официальная, согласен.
Зачем вы меня так обижаете? :(
Не "зачем", а "почему". Так получилось, от текста названного ужасным оказалось просто перейти к ужасу на go.dev/doc.
Это моя первая статья и писал я её я, а не нейронка.
А что бы с Вами сделали если бы Вы её публиковали позже? И вообще, первый раз за рулём - не повод посещать центр Москвы... А вот отказ от возможности спрятаться за нейронку - это достойно.
Я сидел и искал материалы разных менторов(что бы выбрать задачи и их объяснить).
Это ужасно. Я подозревал, что с менторами не просто, но что до такой степени... Так мы и до мышей инструкции по открытию капота джипа на 15 страницах в картинках, реально было в Интернете и армии США, докатимся.
Я помню, что когда читал текст по Go, детали массивов и слайсов заинтересовали. Теперь или этот текст исчез, или это эффект Манделы. Но заметки по поводу сохранились. Вроде всё конкретно, понятно и никаких объяснений на словах не нужно.
Вот
package main
import (
"fmt"
"unsafe"
)
func main() {
a1 := [...]int{1, 2, 3, 4, 5, 6, 7}
fmt.Printf(" 1. %T %[2]p %[1]v\n", a1, &a1)
a2 := [...]int{11, 12, 13, 14, 15, 16, 17}
fmt.Printf(" 2. %T %[2]p %[1]v\n", a2, &a2)
a2 = a1
a2[3] = 100
fmt.Printf(" 3. %T %[2]p %[1]v\n", a1, &a1)
fmt.Printf(" 4. %T %[2]p %[1]v\n", a2, &a2)
useArray(a1)
fmt.Printf(" 5. %T %[2]p %[1]v\n", a1, &a1)
useArrayP(&a1)
fmt.Printf(" 6. %T %[2]p %[1]v\n", a1, &a1)
s1 := []int{11, 12, 13, 14, 15}
fmt.Printf(" 7. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s1, len(s1), cap(s1), &s1, &s1[0])
s1 = append(s1, 55)
fmt.Printf(" 8. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s1, len(s1), cap(s1), &s1, &s1[0])
s1 = append(s1, 56, 57)
fmt.Printf(" 9. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s1, len(s1), cap(s1), &s1, &s1[0])
s2 := s1[2:5]
fmt.Printf("10. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s2, len(s2), cap(s2), &s2, &s2[0])
s2 = append(s2, 31, 32,33)
fmt.Printf("11. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s2, len(s2), cap(s2), &s2, &s2[0])
fmt.Printf("12. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s1, len(s1), cap(s1), &s1, &s1[0])
useSlice(s2)
fmt.Printf("13. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s2, len(s2), cap(s2), &s2, &s2[0])
fmt.Printf("14. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s1, len(s1), cap(s1), &s1, &s1[0])
s2 = s2[:5]
fmt.Printf("15. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s2, len(s2), cap(s2), &s2, &s2[0])
useSliceP(&s2, 40)
fmt.Printf("16. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s2, len(s2), cap(s2), &s2, &s2[0])
fmt.Printf("17. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s1, len(s1), cap(s1), &s1, &s1[0])
useSliceP(&s2, 41)
fmt.Printf("18. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s2, len(s2), cap(s2), &s2, &s2[0])
fmt.Printf("19. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
s1, len(s1), cap(s1), &s1, &s1[0])
}
func useArray(a [7]int) {
a[2] = 101
fmt.Printf("a1. %T %[2]p %[1]v\n", a, &a)
}
func useArrayP(a *[7]int) {
a[4] = 102
fmt.Printf("b1. %T %[2]p %[1]v %[1]p\n", a, &a)
p := (*int)(unsafe.Pointer(a))
*p = 201
}
func useSlice(a []int) {
fmt.Printf("c1. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
a, len(a), cap(a), &a, &a[0])
a[4] = 80
a = append(a, 81, 82)
fmt.Printf("c2. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
a, len(a), cap(a), &a, &a[0])
}
func useSliceP(a *[]int, w int) {
fmt.Printf("d1. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
a, len(*a), cap(*a), &a, &((*a)[0]))
(*a)[3] = w
*a = append(*a, 91, 92)
fmt.Printf("d2. %T %[4]p %[5]p %[2]d %[3]d %[1]v\n",
a, len(*a), cap(*a), &a, &((*a)[0]))
}
Основной посыл статьи во первых самому убедиться в своих знаниях, а во вторых дать возможность порешать задачки на понимание темы.
Убеждаться в своих знаниях лучше пет проектом, не пытаясь проделать это за счёт окружающих, а вот "порешать задачки" меня встревожило. Это не задачки, это вопросики. Задачей может быть разработка алгоритма. Может быть задача по физике - физика есть некоторая теория над Природой. А язык Go и сам природой не является и никакой теории над ним нет - это набор решений его авторов. Точно так же не может существовать задач по Звёздному Пути, например. Вопросы могут быть, задачи - нет.
А что повсеместно пытаются подходить к программированию как к природе, учить на примерах как нейронку - это я вижу, сильно пугаюсь, ничего поделать не могу.
Документация есть и официальная, согласен.
Так я писал иначе - была нормальная документация да куда-то, вроде, как подевалась. Теперь нету, одни блоги да заметки по поводу, может получше чем от Ваших менторов, но уровень тот же самый - принципиально недостаточный.
Слайс - передаётся в функцию по ссылке
Нет. Как бы это странно не звучало - слайс технически передается копией. Но есть нюансы

Массивы и слайсы в Golang