Size: a a a

2020 May 21

s

snip in Go-go!
Roman Sharkov
? = try read, return zero-value, false if failed
зиро вэлью еще плох тем, что будут истории с типизированным nil  и проверкой != nil которая даст true
источник

AK

Anton Kucherov in Go-go!
Roman Sharkov
а мне кажется, что если мы ввели такой синтаксис для map, но не распространяли для nullable, то это косяк языка.

v, ok := ? map[“key”]
v, ok := ? slice[2]
v, ok := ? <-channel
v, ok := ? foo.Bar.Baz
v, ok := ? foo.Bar.Baz[“key”][10].Value
Так пот прямо так и напишите авторам Go в issue на GitHub. Я думаю вот этот пример они вполне себе поймут. 🙂 Для того, чтобы узнать их мнение на этот счет не надо делать многостраничный пропозал.
источник

RS

Roman Sharkov in Go-go!
Daniel Podolsky
для начала - нам нужен тип выражения справа. потому, что nil у нас типизованный
type Val struct { Value float64 }
type Bar struct { Baz map[string][]Val }
type Foo struct { Bar *Bar }

var m map[string]string
var s []int64
var c chan struct{}
var foo *Foo

v, ok := ? m[“key”] // v string
v, ok := ? s[2] // v int64
v, ok := ? <-c // v struct{}
v, ok := ? foo.Bar // v *Bar
v, ok := ? foo.Bar.Baz // map[string]Val
v, ok := ? foo.Bar.Baz[“key”][10].Value // v float64
источник

RS

Roman Sharkov in Go-go!
snip
зиро вэлью еще плох тем, что будут истории с типизированным nil  и проверкой != nil которая даст true
можно пример?
источник

s

snip in Go-go!
Roman Sharkov
можно пример?
лень писать, но это тот же вариант что был где -то выше, где в конце цепочки интерфейс, мы получаем некий Muz(nil) и делает if mz != nil { mz.Method()}
источник

RS

Roman Sharkov in Go-go!
snip
лень писать, но это тот же вариант что был где -то выше, где в конце цепочки интерфейс, мы получаем некий Muz(nil) и делает if mz != nil { mz.Method()}
чёт я не вижу проблемы
источник

s

snip in Go-go!
type Greeter interface {
 Greet(name string) string
}
type Bar struct {
 G Greeter
}
type Foo struct {
  B *Bar
}

s := Foo{B: &Bar{}}

v := ? s.B.G
if v != nil {
   v.Greet("Joe")
}
что будет в этом кейсе?
источник

RS

Roman Sharkov in Go-go!
snip
type Greeter interface {
 Greet(name string) string
}
type Bar struct {
 G Greeter
}
type Foo struct {
  B *Bar
}

s := Foo{B: &Bar{}}

v := ? s.B.G
if v != nil {
   v.Greet("Joe")
}
что будет в этом кейсе?
v будет nil, следственно в if не зайдёт
источник

s

snip in Go-go!
будет nil или Greeter(nil)?
источник

RS

Roman Sharkov in Go-go!
snip
будет nil или Greeter(nil)?
https://play.golang.org/p/oQBPtIbhIwy

получится то-жe самое, только вместо

var v Greeter
if s.B != nil {
v = s.B.G
}


будет:

v := ? s.B.G
источник

RS

Roman Sharkov in Go-go!
Anton Kucherov
Так пот прямо так и напишите авторам Go в issue на GitHub. Я думаю вот этот пример они вполне себе поймут. 🙂 Для того, чтобы узнать их мнение на этот счет не надо делать многостраничный пропозал.
надо будет написать, но некое временя это таки займёт
источник

NP

Nikita Provotorov in Go-go!
В чем семантическое отличие []byte(…) от []byte{…}?
источник

X

Xo in Go-go!
Одно это конвертация, а второе просто определение
источник

NP

Nikita Provotorov in Go-go!
Xo
Одно это конвертация, а второе просто определение
ок, а конвертация для всех встроенных типов данных есть?
источник

DP

Daniel Podolsky in Go-go!
Nikita Provotorov
ок, а конвертация для всех встроенных типов данных есть?
нет, только из совместимых
источник

NP

Nikita Provotorov in Go-go!
Daniel Podolsky
нет, только из совместимых
я имел в виду не ИЗ каких, а В какие. т.е. операция T(…) определена для всех встроенных T?
источник

DP

Daniel Podolsky in Go-go!
и не только встроенных
источник

DP

Daniel Podolsky in Go-go!
но - только из совместимых
источник

NP

Nikita Provotorov in Go-go!
Daniel Podolsky
и не только встроенных
о как, я могу для своего типа определить кастомные круглые скобки?
источник

AK

Anton Kucherov in Go-go!
Nikita Provotorov
о как, я могу для своего типа определить кастомные круглые скобки?
В Go нет перегрузки операторов если вы об этом. 🤔
источник