GO_INTERVIEW_LIB Telegram 1060
Какие знаете бест практис по использованию интерфейсов

1. Чем меньше методов в интерфейсе — тем лучше. Классический пример — io.Reader и io.Writer. Один метод, зато супер универсально.

type Stringer interface {
String() string
}


2. Принимать интерфейсы, а возвращать конкретные типы.

Это удобно и для тестов, и для читаемости. Функция, которая что-то использует, пусть принимает интерфейс, а фабрика или конструктор возвращает конкретный тип.

func Process(r io.Reader) error { ... }       // принимаем интерфейс
func NewBuffer() *bytes.Buffer { ... } // возвращаем структуру


3. Не создавать интерфейсы на будущее. Если абстракция сейчас не нужна — лучше оставить конкретный тип, иначе код будет сложнее без пользы.

4. Переиспользовать стандартные интерфейсы, если они подходят. В стандартной библиотеке уже много хороших примеров — error, fmt.Stringer, context.Context.

5. Осторожно с interface{}. Это, по сути, отключение типизации. Если нужен универсальный контейнер — ок, но в остальном лучше обойтись конкретными интерфейсами или дженериками.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6



tgoop.com/go_interview_lib/1060
Create:
Last Update:

Какие знаете бест практис по использованию интерфейсов

1. Чем меньше методов в интерфейсе — тем лучше. Классический пример — io.Reader и io.Writer. Один метод, зато супер универсально.

type Stringer interface {
String() string
}


2. Принимать интерфейсы, а возвращать конкретные типы.

Это удобно и для тестов, и для читаемости. Функция, которая что-то использует, пусть принимает интерфейс, а фабрика или конструктор возвращает конкретный тип.

func Process(r io.Reader) error { ... }       // принимаем интерфейс
func NewBuffer() *bytes.Buffer { ... } // возвращаем структуру


3. Не создавать интерфейсы на будущее. Если абстракция сейчас не нужна — лучше оставить конкретный тип, иначе код будет сложнее без пользы.

4. Переиспользовать стандартные интерфейсы, если они подходят. В стандартной библиотеке уже много хороших примеров — error, fmt.Stringer, context.Context.

5. Осторожно с interface{}. Это, по сути, отключение типизации. Если нужен универсальный контейнер — ок, но в остальном лучше обойтись конкретными интерфейсами или дженериками.

🐸 Библиотека Go для собеса

BY Библиотека Go для собеса | вопросы с собеседований


Share with your friend now:
tgoop.com/go_interview_lib/1060

View MORE
Open in Telegram


Telegram News

Date: |

Find your optimal posting schedule and stick to it. The peak posting times include 8 am, 6 pm, and 8 pm on social media. Try to publish serious stuff in the morning and leave less demanding content later in the day. A new window will come up. Enter your channel name and bio. (See the character limits above.) Click “Create.” Over 33,000 people sent out over 1,000 doxxing messages in the group. Although the administrators tried to delete all of the messages, the posting speed was far too much for them to keep up. There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”.
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American