170 похожих чатов

А если в го функция возвращает два значения, можно ли

на выходе как-то сразу привести возвращаемый интерфейс к типу?
func sample() (interface{}, error) {
return interface{}, nil
}

var response = sample().(string)

пытался в такой способ, но он работает только в том случае, если функция возвращает 1 лишь объект

2 ответов

7 просмотров

Если два значения, то привести к нужному типу сразу нельзя. Игнорировать ошибки - плохо. Но если у вас, например, вызов функции от какого либо константного значения и точно не будет ошибки, то можно сделать функцию обертку, которая будет возвращать только нужную вам переменную, но лучше этого избежать. Паника происходит не от приведения к типу, а от дальнейшего использования переменной, без проверки на успех приведения или без проверки на nil. При приведения типа, может быть возвращено одно или два значения, если добавить вторую переменную для получения значения, например так: response, ok := sample().(string) То в переменной ok будет true, если приведение удалось Вот пример по вашим вопросам: https://play.golang.org/p/rL2DW05qKS-

Нельзя. Можешь сделать Cast(v interface{}, err error) (string, error) { return v.(string), err } response, _ := Cast(Sample())

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
например asm AT&T ... label: .string "hi" ... # not error lea label(%rip), %rax # error ( not compile ) mov %rip, %rax # not error mov (%rip), %rax из форумов прочитал чт...
Simple Sorcerer
6
Почему никто не подсказал, что можно объявить свои типы данных, в которых меньше полей, чем в отданном джейсоне, и добавлять их по необходимости?
Strange Rabbit
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Есть предложения, как подобное можно упростить?
Hemul GM
12
Карта сайта