GOLANG_INTERVIEW Telegram 297
📌 Предположим, ваша функция должна возвращать детализированные Recoverable и Fatal ошибки. Как это реализовано в пакете net? Как это надо делать в современном Go

В пакете net в стандартной библиотеке Go возвращение детализированных ошибок реализовано с помощью ошибок, которые являются значениями пользовательских типов, реализующих интерфейс net.Error. Этот интерфейс определен следующим образом:

type Error interface {
error
Timeout() bool // возвращает true, если ошибка связана с таймаутом
Temporary() bool // возвращает true, если ошибка является временной
}

Интерфейс net.Error включает методы Timeout() и Temporary(), которые позволяют клиентам проверять, является ли ошибка связанной с таймаутом или временной. Это позволяет клиентам принимать соответствующие действия в зависимости от типа ошибки.

В современном Go, начиная с версии 1.13, рекомендуется использовать синтаксис ошибок, основанный на типах, с помощью применения пакета errors и интерфейса fmt.Formatter. Этот подход позволяет создавать богатые по содержанию и информативные ошибки, которые могут хранить дополнительные данные и форматироваться в нужном формате при выводе.

Вот пример, как можно реализовать детализированные ошибки в современном Go:

package main

import (
"errors"
"fmt"
)

type RecoverableError struct {
Message string
}

func (e *RecoverableError) Error() string {
return fmt.Sprintf("RecoverableError: %s", e.Message)
}

type FatalError struct {
Message string
}

func (e *FatalError) Error() string {
return fmt.Sprintf("FatalError: %s", e.Message)
}

func main() {
err := doSomething()

switch {
case errors.Is(err, &RecoverableError{}):
fmt.Println("Recoverable error:", err)
case errors.Is(err, &FatalError{}):
fmt.Println("Fatal error:", err)
default:
fmt.Println("Unknown error:", err)
}
}

func doSomething() error {
// Ваша логика здесь

return &RecoverableError{Message: "Something went wrong"}
}

В этом примере у нас есть два типа ошибок: RecoverableError и FatalError. Оба типа реализуют интерфейс error и предоставляют дополнительные данные в своих методах Error(). Функция doSomething() возвращает ошибку типа RecoverableError.

Функция main() использует функцию errors.Is() для проверки типа ошибки и выполняет соответствующие действия в зависимости от типа ошибки.

Важно отметить, что настройка и использование детализированных ошибок может различаться в зависимости от конкретной задачи и предпочтений разработчика. Рекомендуется следовать общим рекомендациям и принципам языка Go при работе с обработкой ошибок. Например, рекомендуется использовать типы ошибок, которые являются значениями пользовательских типов и реализуют интерфейс error, чтобы их можно было легко сравнивать с помощью функции errors.Is(), как показано в примере выше. Также рекомендуется предоставлять информативные сообщения об ошибках, чтобы облегчить отладку и понимание причины ошибки.

Всегда стоит помнить, что обработка ошибок - важная часть разработки программного обеспечения, и хорошая практика заключается в предоставлении четкой информации о возникших ошибках, чтобы помочь пользователям программы или другим разработчикам понять, что пошло не так и как это исправить.

@golang_interview
👍9🔥32



tgoop.com/golang_interview/297
Create:
Last Update:

📌 Предположим, ваша функция должна возвращать детализированные Recoverable и Fatal ошибки. Как это реализовано в пакете net? Как это надо делать в современном Go

В пакете net в стандартной библиотеке Go возвращение детализированных ошибок реализовано с помощью ошибок, которые являются значениями пользовательских типов, реализующих интерфейс net.Error. Этот интерфейс определен следующим образом:

type Error interface {
error
Timeout() bool // возвращает true, если ошибка связана с таймаутом
Temporary() bool // возвращает true, если ошибка является временной
}

Интерфейс net.Error включает методы Timeout() и Temporary(), которые позволяют клиентам проверять, является ли ошибка связанной с таймаутом или временной. Это позволяет клиентам принимать соответствующие действия в зависимости от типа ошибки.

В современном Go, начиная с версии 1.13, рекомендуется использовать синтаксис ошибок, основанный на типах, с помощью применения пакета errors и интерфейса fmt.Formatter. Этот подход позволяет создавать богатые по содержанию и информативные ошибки, которые могут хранить дополнительные данные и форматироваться в нужном формате при выводе.

Вот пример, как можно реализовать детализированные ошибки в современном Go:

package main

import (
"errors"
"fmt"
)

type RecoverableError struct {
Message string
}

func (e *RecoverableError) Error() string {
return fmt.Sprintf("RecoverableError: %s", e.Message)
}

type FatalError struct {
Message string
}

func (e *FatalError) Error() string {
return fmt.Sprintf("FatalError: %s", e.Message)
}

func main() {
err := doSomething()

switch {
case errors.Is(err, &RecoverableError{}):
fmt.Println("Recoverable error:", err)
case errors.Is(err, &FatalError{}):
fmt.Println("Fatal error:", err)
default:
fmt.Println("Unknown error:", err)
}
}

func doSomething() error {
// Ваша логика здесь

return &RecoverableError{Message: "Something went wrong"}
}

В этом примере у нас есть два типа ошибок: RecoverableError и FatalError. Оба типа реализуют интерфейс error и предоставляют дополнительные данные в своих методах Error(). Функция doSomething() возвращает ошибку типа RecoverableError.

Функция main() использует функцию errors.Is() для проверки типа ошибки и выполняет соответствующие действия в зависимости от типа ошибки.

Важно отметить, что настройка и использование детализированных ошибок может различаться в зависимости от конкретной задачи и предпочтений разработчика. Рекомендуется следовать общим рекомендациям и принципам языка Go при работе с обработкой ошибок. Например, рекомендуется использовать типы ошибок, которые являются значениями пользовательских типов и реализуют интерфейс error, чтобы их можно было легко сравнивать с помощью функции errors.Is(), как показано в примере выше. Также рекомендуется предоставлять информативные сообщения об ошибках, чтобы облегчить отладку и понимание причины ошибки.

Всегда стоит помнить, что обработка ошибок - важная часть разработки программного обеспечения, и хорошая практика заключается в предоставлении четкой информации о возникших ошибках, чтобы помочь пользователям программы или другим разработчикам понять, что пошло не так и как это исправить.

@golang_interview

BY Golang вопросы собеседований


Share with your friend now:
tgoop.com/golang_interview/297

View MORE
Open in Telegram


Telegram News

Date: |

The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians. Ng Man-ho, a 27-year-old computer technician, was convicted last month of seven counts of incitement charges after he made use of the 100,000-member Chinese-language channel that he runs and manages to post "seditious messages," which had been shut down since August 2020. It’s yet another bloodbath on Satoshi Street. As of press time, Bitcoin (BTC) and the broader cryptocurrency market have corrected another 10 percent amid a massive sell-off. Ethereum (EHT) is down a staggering 15 percent moving close to $1,000, down more than 42 percent on the weekly chart. Some Telegram Channels content management tips Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel.
from us


Telegram Golang вопросы собеседований
FROM American