Size: a a a

2020 December 11

C

Calculon🤖 in Go-go!
Denis Nest
Это можно, но:
1. Никак не пойму, как правильно юзать интерфейсы, хочу разобраться, даже если это сложнее. Понимаю, что можно решить проще, вопрос больше академический.
2. Пользователь утилиты не хочет разбираться с доп флагами. Он хочет получить короткую инфу по списку ip, и в случае необходимости просто указать нужный ip и получить подробную инфу.
значит придется приседать
источник

00

0JLQuCDQotGP0L0= 0x3... in Go-go!
Skill
color.RGBA{}
не поддерживает что-ли float числа?
Нет, там инты
источник

DP

Daniel Podolsky in Go-go!
Nikita Tarasov
И как от этого можно избавиться?) Мне не нужны зависимости. Оно мне мешает)
Вопрос не ясен
источник

DN

Denis Nest in Go-go!
Calculon🤖
определение типа аргумента во время парсинга потребует слишком много ненужных приседаний
И кстати, не много, если пойти путем использования net.ParseIP(ip). Если nil — пробовать проверить есть ли по пути файл (не важно, корректный ли путь): если есть — ок. Нет — Fatal в вывод.
источник

00

0JLQuCDQotGP0L0= 0x3... in Go-go!
Denis Nest
Это можно, но:
1. Никак не пойму, как правильно юзать интерфейсы, хочу разобраться, даже если это сложнее. Понимаю, что можно решить проще, вопрос больше академический.
2. Пользователь утилиты не хочет разбираться с доп флагами. Он хочет получить короткую инфу по списку ip, и в случае необходимости просто указать нужный ip и получить подробную инфу.
источник

DN

Denis Nest in Go-go!
источник

C

Calculon🤖 in Go-go!
Denis Nest
И кстати, не много, если пойти путем использования net.ParseIP(ip). Если nil — пробовать проверить есть ли по пути файл (не важно, корректный ли путь): если есть — ок. Нет — Fatal в вывод.
if else if else else ага
источник

DN

Denis Nest in Go-go!
Calculon🤖
if else if else else ага
Именно этого я хочу избежать: https://refactoring.guru/ru/replace-conditional-with-polymorphism
источник

PK

Phil Kulin in Go-go!
Denis Nest
Привет. Ковыряю интерфейсы, немного запутался. У меня такой кейс: в утилиту командной строки можно передать конкретный ip4 или путь к конфигу в котором хранится список ip4. Утилита должна реагировать на это по-разному: в случае с передачей ip сделать одно действие, в случае с строкой пути — другое. Это просто реализовать через if, но для практики хочу попробовать через замену if`а полиморфизмом.

Структуры и интерфейс создал:
type ArgIP struct {
IP net.IP
}
type ArgConfig struct {
Path string
}

type Arger interface {
ParseArg(arg string) error
}


по идее в методах я должен реализовать логику для разных структур? А os.Args[1] передавать в переменную с типом Arger? Или как решить задачу правильно?
Честно говоря не вижу тут место абстрактному прогаммированию. Это две разные абсолютно  задачи.
источник

p

pragus in Go-go!
Denis Nest
Привет. Ковыряю интерфейсы, немного запутался. У меня такой кейс: в утилиту командной строки можно передать конкретный ip4 или путь к конфигу в котором хранится список ip4. Утилита должна реагировать на это по-разному: в случае с передачей ip сделать одно действие, в случае с строкой пути — другое. Это просто реализовать через if, но для практики хочу попробовать через замену if`а полиморфизмом.

Структуры и интерфейс создал:
type ArgIP struct {
IP net.IP
}
type ArgConfig struct {
Path string
}

type Arger interface {
ParseArg(arg string) error
}


по идее в методах я должен реализовать логику для разных структур? А os.Args[1] передавать в переменную с типом Arger? Или как решить задачу правильно?
Ну сделай type Adresser interface { Address() []net.IP }
источник

C

Calculon🤖 in Go-go!
мне больно на это смотреть
источник

C

Calculon🤖 in Go-go!
имхо три ифа лучше
источник

DN

Denis Nest in Go-go!
pragus
Ну сделай type Adresser interface { Address() []net.IP }
type ArgIP struct {
IP net.IP
}
type ArgConfig struct {
Path string
}

type Arger interface {
ParseArg(arg string) error
}

func (ip ArgIP) ParseArg(arg string) error {
// работаю с конкретным ip
return nil
}
func (config ArgConfig) ParseArg(arg string) error {
       // работаю о списком ip
return nil
}

верно?
источник

C

Calculon🤖 in Go-go!
не пытайся натягивать интерфейсы там где они не нужны
источник

DN

Denis Nest in Go-go!
Calculon🤖
имхо три ифа лучше
Да понимаю я! Я не хочу сделать просто, я хочу разобраться.
источник

00

0JLQuCDQotGP0L0= 0x3... in Go-go!
Calculon🤖
мне больно на это смотреть
Если подумать, то можно и без елсов вообще обойтись
источник

C

Calculon🤖 in Go-go!
0JLQuCDQotGP0L0= 0x3d4f22
Если подумать, то можно и без елсов вообще обойтись
можно
источник

C

Calculon🤖 in Go-go!
но это блин некорректно
источник

C

Calculon🤖 in Go-go!
ParseIP вернул тебе nil - что дальше? Гадать конфиг тебе отдали или какую-то левую бяку
источник

C

Calculon🤖 in Go-go!
неопределенность, нельзя будет нормальную ошибку отдать т.к. все что не IP прога будет интерпретировать как путь
источник