Решил вот посмотреть на язык, читаю, дошел до слайсов.
package main
import (
"fmt"
)
func main() {
a := []int{1, 2, 3, 4, 5}
b := []int{1, 2, 3, 4, 5}
c := a[1:3]
d := b[1:5]
c = append(c, 10)
d = append(d, 10)
c[0] = 0
d[0] = 0
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
[1 0 3 10 5]
[1 2 3 4 5]
[0 3 10]
[0 3 4 5 10]
То есть в зависимости от одного индекса зависит, будет ли меняться низлежащий массив или нет. Да, я знаю про синтаксис [1:3:3], но это избыточность, и по умолчанию так же все равно не пишут. И если мне это в функцию дают, мне что, каждый раз сравнивать size и capacity, чтобы дел не напороть? А учитывая, что я не могу в сигнатуре функции указать константность, это еще сильнее усугубляет.
Ну а про классические претензии вроде отсутствия дженериков и перегрузки, но при этом существования generic-like встроенных типов с ad-hoc синтаксисом, жуткой обработки ошибок и прочего, я уж молчу, это давно уже обсосали везде. Вот и вопрос, как оно взлетело?