Anonymous
Lee
Рекомендую просто писать тесты :)
Я не особо понимаю что должно быть в тесте. Я разрабатываю приложуху и мануально тестирую: подкидываю значение, дамплю логи, фиксаю.
Alex
Илья
Anonymous
Lee
Lee
Скиньте свои проджекты с тестами на гитхабе, хоть гляну
Anonymous
Serg
Lee
Kirill
Lee
Смелость — черта храбрых, или как там говорят.
Alex
прикольно
Anatoly
Парни, пишу программу которая работает с minio. Написал юниттест который вообще к минио не относится, запускаю готест, а он мне пишет что не может подключиться к минио на 9000 порту. Конечно не может - минио у меня сейчас не запущен, но почему он вообще хочет к ней подключиться во время запусков юниттестов?
🄽🄸🄺🄸🅃🄰
Кто может привести простой пример функции для ассерта интерфейса к конкретному типу ? Так можно делать? Передать интерфей по ссылке, и строку название типа, чтобы в функции сделать ассерт и присвоить этот точный тип переданному интерфейсу?
Илья
Maxim
🄽🄸🄺🄸🅃🄰
func assertType(someInterface *ElementsInterface, exactTypeName string){
exType := elementsInterface
switch visualisationType {
case "type1":
case "type2":
someInterface = (*ExType).(ExactFirstType)
break
case "type3":
someInterface = (*ExType).(ExactThirdType)
}
}
Aleksandr
🄽🄸🄺🄸🅃🄰
чтот такое ваяю
Илья
зачем?
🄽🄸🄺🄸🅃🄰
Anatoly
ainu
ainu
В visual studio code можно сделать две вещи
ainu
1. Прогон тестов при сохранении файла
Илья
зачем нужна ссылка на интерфейс, если интерфейс - это уже ссылка?
ainu
2. Генерацию теста из ide контекстным меню. (Второе не для всех кейсов норм вроде внешних взаимодействий с файлами но функции тестить самое то)
🄽🄸🄺🄸🅃🄰
есть
data
,
newData
, в них обоих приходит один и тот же интерфейс. Их надо сливать через append. Нужно сделать Assert к точному типу. Типы хранятся в отдельном пакете. Хочу в пакет положить метод, который буду вызывать с этими переменными, чтобы их приводить к типу по имени
Maxim
Maxim
Andrei 🦉
Lee
ainu
Я правильно понимаю - есть некие данные которые приходят в нечто interface{} и надо в зависимости от типа в разные места юзать?
Anonymous
Andrei 🦉
но рефлексия медленная и чревата паниками в бою
🄽🄸🄺🄸🅃🄰
тобишь имени делать
🄽🄸🄺🄸🅃🄰
строковому
🄽🄸🄺🄸🅃🄰
там нет типов, которые надо выбирать, их надо присваивать
Andrei 🦉
кинь пример кода
ainu
Например можно передавать два куска данных
ainu
То есть делаем структуру данные, тип
ainu
И передаём и данные и тип
ainu
Тип это строка или константа
ainu
В зависимости от типа делаем разные вещи
ainu
Динамическая типизация для бедных
Anonymous
Hint - свою мысль можно написать в одном сообщении. Это проще, чем кажется ;)
🄽🄸🄺🄸🅃🄰
кинь пример кода
func assertType(elementsInterface models.ElementsInterface, visualisationType string){
ExType := elementsInterface
switch visualisationType {
case "area":
case "column":
elements := ExType.(models.ChartElements)
elementsInterface = &elements
break
case "pie":
elements := ExType.(models.PieElements)
elementsInterface = &elements
}
}
Andrei 🦉
@Altenrion вопрос - у тебя все возможные типы определены и известны заранее? и прилетевшая структура точно является экземпляров одного из этих типов?
🄽🄸🄺🄸🅃🄰
Andrei 🦉
тогда делай через elements, ok := ExType.(models.ChartElements)
Andrei 🦉
на первом положительном ок - останавливаешь
Andrei 🦉
когда ты приводишь интерфейс к типу, то вторым параметром в ответе тебе прилетает была ли конвертация успешна
Andrei 🦉
просто делаешь перебор до первого совпадения
🄽🄸🄺🄸🅃🄰
Пример применения того что пишу
workEntity := element.(Work)
data := countedData[workEntity.Name]
assertType(data, visualisationType)
assertType(workEntity.Data, visualisationType)
data = append(data, workEntity.Data...)
countedData[workEntity.Name] = data
Илья
Похоже на дже*****
🄽🄸🄺🄸🅃🄰
Моя идея в принципе адекваатна ?
Andrei 🦉
а, ок, я неправильно понял вопрос
короче го так не умеет
Andrei 🦉
ты можешь либо делать так, как в твоем примере
Andrei 🦉
либо через рефлексию
Илья
Andrei 🦉
и то и то чревато паниками, но это go way
🄽🄸🄺🄸🅃🄰
ой вариант он не гошный точно(
🄽🄸🄺🄸🅃🄰
всеравно интерфейсы не убираю...
🄽🄸🄺🄸🅃🄰
нужен точный ассерт
🄽🄸🄺🄸🅃🄰
чтобы сделать структуру для append
🄽🄸🄺🄸🅃🄰
[]Type
Andrei 🦉
в смысле точный ассерт?
lements := ExType.(models.PieElements)
ты и так его делаешь таким образом, только ошибку не обрабатываешь
Andrei 🦉
го тебе точно скажет объект этого ли типа прячется за интерфейсом или нет
Andrei 🦉
после чего можешь соорудить из таких элементов массив []models.PieElements
🄽🄸🄺🄸🅃🄰
мне нужен метод
🄽🄸🄺🄸🅃🄰
точнее функция, которую я уберу в пакет к этим структурам
🄽🄸🄺🄸🅃🄰
поэтому я не делаю switch прям в месте где нужны эти структуры а колдую именно функцию