Pull to refresh

Comments 5

Уж было хотел назвать автора последними и предпоследними словами, а статье его и нейронке её писавшей объявить "изыди" и, заодно, ткнуть мордой в документацию, но увы... В принципе, ткнуть можно, на go.dev/doc есть ссылка Go Slices: usage and internals, спрятана она в секции Language блока Codewalks и покрывает эту статью сто раз как бык овцу. Беда в том, что мне просто повезло. И беда в том, что это ссылка на блог. Вдумайтесь - документацией по Go является сборище блогов, то есть одна баба сказала. Это что такое вообще, если не выбор между саботажем и катастрофой?

На go.dev/doc есть ссылка на спецификацию языка, но она достаточно формальна чтобы быть неудобной для чтения и непригодной для обучения. Ау, люди - я один (смутно) помню, что описание языка совсем недавно было на сайте и были сэндвичи меню с общим и локальным содержаниями? Я помню, что познакомившись с Go отнёс его к хорошо документированным языкам, типа Rust или Dart, для чего абсолютно необходим связный текст, который можно было (рекомендовать) прочитать от начала и до конца и узнать о Go, как о языке, всё. Значит он там был? Not any more, или я чего-то не вижу в упор?

По поводу статьи и слайсов достаточно сказать, что в Go параметры передаются по значению, то есть копируются, но копирование не глубокое. чем вся эта ерунда и исчерпывается. И да, со слайсами слайсов полезно поиграть, непременно иногда добавляя в слайс новые элементы, и понять - лучше этим не заниматься.

По-моему база всегда раскрывалась в Go Tour и тему со слайсами там как раз в сендвич-меню можно найти.

Зачем вы меня так обижаете? :(
Это моя первая статья и писал я её я, а не нейронка. Я сидел и искал материалы разных менторов(что бы выбрать задачи и их объяснить). Основной посыл статьи во первых самому убедиться в своих знаниях, а во вторых дать возможность порешать задачки на понимание темы. Документация есть и официальная, согласен.

Зачем вы меня так обижаете? :(

Не "зачем", а "почему". Так получилось, от текста названного ужасным оказалось просто перейти к ужасу на 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 и сам природой не является и никакой теории над ним нет - это набор решений его авторов. Точно так же не может существовать задач по Звёздному Пути, например. Вопросы могут быть, задачи - нет.

А что повсеместно пытаются подходить к программированию как к природе, учить на примерах как нейронку - это я вижу, сильно пугаюсь, ничего поделать не могу.

Документация есть и официальная, согласен.

Так я писал иначе - была нормальная документация да куда-то, вроде, как подевалась. Теперь нету, одни блоги да заметки по поводу, может получше чем от Ваших менторов, но уровень тот же самый - принципиально недостаточный.

Слайс - передаётся в функцию по ссылке

Нет. Как бы это странно не звучало - слайс технически передается копией. Но есть нюансы

Sign up to leave a comment.

Articles