В стандартной библиотеке go есть ли инструменты для работы с многомерными срезами/массивами?
Всем привет. Го мой первый язык, и я открыл задачку для школьников на диагональ матрицы, и не смог её решить. Неужели нет никаких инструментов, чтоб не возиться с кучей вложенных циклов? Ведь без инструментов, тут нужен iq минимум 150, чтоб такие логические конструкции вместить в голове. Уже хочу бросить всё, раз даже такое не смог решить. Открыл решения, там питон в основном, и это в одну строчку всё у них. А тут городил циклы, так ничего и не вышло. И даже рабочее решение от gpt я понять не смог. На этот вопрос мне он тоже ответить не смог.
Ведь без инструментов, тут нужен iq минимум 150, чтоб такие логические конструкции вместить в голове.
Надеюсь что это не тролинг, т.к. смысла в том, чтобы решать учебные задачки при помощи готовых инструментов очень мало.
Суть в том, что в начале большинство программистов проходят через то, что им сложно реализовать простые алгоритмы. Есть https://projecteuler.net/archives, на котором разбираются задачки, можно на ютубе их посмотреть. В целом если ищете, где на каждый чих будут готовые инструменты, то го не для вас точно. Т.к. даже в бекенде(облатсь для которой он предназначен) часто приходится писать сырые sql запросы и функционал, который в яве/питоне идёт из коробки. Также часто нужно залезать в исходники библиотек/програм, поэтому го это далеко не лучший выбор для новичка, т.к. вам нужно знать предметную область в которой вы будете его применять, желательно понимать ОС, на которой вы будете его применять (по началу не так важно конечно) и быть готовым писать много кода.
А тут городил циклы, так ничего и не вышло.
Можно сюда код было выложить или тут бы подсказали как сделать правильно.
calculator212, но ведь питонисты и джависты изначально тоже не знают предметную область. И на джаве кажется пишут более сложные, большие приложения, а на го поменьше. Ну и конкуренция в питон бэкенд запредельная. А за ссылку спасибо. Задачу я решил кстати, помог чатгпт с ней, и разобрался как это делать, что самое главное. Правда словил депрессняк от этого, но это уже другая тема.
но ведь питонисты и джависты изначально тоже не знают предметную область.
Так и есть, но у одних есть джанго, а у других Spring, есть общепринятые ORM(в го часто нужно писать запросы самому), которые в целом позволяют уйти от написания sql в большинстве случаев, даже из реальной практики пример, знаю людей которые используют джанго и не знают как устроена аутентификация, в го с этим сложнее т.к. в принципе считается, что программист может переключиться между фреймворками почти безболезненно, в питоне/яве в целом такая ситуация довольно редкая.
В стандартной библиотеке go есть ли инструменты для работы с
Кстати многих удобных инструментов/библиотек нет, которые есть в других языках, так что много приходиться писать руками без готовых либ, либо их допиливать. В других языках такое тоже конечно есть, но по моему опыту этого меньше. Так что если не готовы писать свои инструменты, то го скорее всего вам не очень подходит.
И часто у джунов есть альтернативные варианты для входа помимо бэка. Но думаю главное, что в яве и питоне попроще найти работу джунам, необязтельно бэк, потом с опытом в разы проще свичнуться в другую область. На hh проверил вакансии, ява без опыта ~340 вакансий, питон ~600, на го ~30. В общем человеку без опыта можно найти работу на го, но это сложно в большинстве случаев в го приходят из других языков.
Правда словил депрессняк от этого, но это уже другая тема.
Ну на мой взгляд не стоит грустить от этого, т.к. все тупят в начале кроме мб пары процентов людей.
calculator212, да, знаю как сложно найти работу на го новичку. Но мне нравится он, почему не понимаю, другие языки чем-то оттолкнули. Значит буду учить всё что необходимо и пилить сам. А там надеюсь он станет чуть популярнее через года полтора и вакансий побольше будет, и либы появятся общепринятые. Дженериков то завезли, а с ними и либы запилятся с множеством всего готового
Если вы решаете задачи на алгоритмы, то вам лучше как раз без таких библиотек, которые в одну строчку делают задачу (потому что в библиотеке кто-то до вас уже написал агоритмы).
Если же по работе нужно для решения проблемы, то берите одну из библиотек, которые я предложил выше.
Ведь без инструментов, тут нужен iq минимум 150
Это вам так кажется, потому что первый язык и вы только начинаете разбираться. На самом деле такие задачи без проблем решаются на чистом го.
Так для работы с диагоналями матриц достаточно одного цикла, зачем там вложенные?
Ну и попробуйте поработать с одномерными массивами, прежде чем переходить к многомерным.
for i := 0; i < len(matrix); i++ {
fmt.Println(matrix[i][i]) //главная
}
for i := 0; i < len(matrix); i++ {
fmt.Println(matrix[i][len(matrix)-1-i]) //побочная
}
Дано число n, n ≤ 100 . Создайте массив n×n и заполните его по следующему правилу:
- числа на диагонали, идущей из правого верхнего в левый нижний угол, равны 1;
- числа, стоящие выше этой диагонали, равны 0;
- числа, стоящие ниже этой диагонали, равны 2.
Входные данные:
Программа получает на вход число n.
Выходные данные:
Необходимо вывести полученный массив. Числа разделяйте одним пробелом.
Диагональ нарисовать смог как раз одним циклом. Далее уже от этого отталкивался и дорисовал то что ниже и выше диагонали было нужно. В итоге вышло как то так
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
matrix := make([][]int, n)
for i := range matrix {
s := make([]int, n)
matrix[i] = s
for j := range s {
if j < n-1-i {
s[j] = 0
} else if j > n-1-i {
s[j] = 2
} else {
s[j] = 1
}
}
}
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[i]); j++ {
if j < len(matrix[i])-1 {
fmt.Print(matrix[i][j], " ")
} else {
fmt.Print(matrix[i][j])
}
}
if i < len(matrix)-1 {
fmt.Printf("\n")
}
}
}
Вот и думаю, это я тупой, или задачка не прям чтоб совсем лёгенькая