Golang задачи с собеседований
4.58K subscribers
491 photos
6 videos
12 files
257 links
Задачи, тесты и теоретические вопросы по Go. Так же по gin, grpc, горутинах, архитектуре api и http стэку.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
What does the following program print?
Anonymous Quiz
49%
128 128
21%
128 0
10%
0 128
21%
0 0
What does the following program print?
Anonymous Quiz
41%
4
59%
6
What does the following program print?
Anonymous Quiz
22%
2 | 2
21%
2 | 210
47%
210 | 210
11%
210 | 2
What does the following program print?
Anonymous Quiz
23%
A
36%
B
22%
C
19%
D
Использование пакетных функций pl/sql в коде golang

Я пытаюсь запустить функцию в пакете в ручке моего API и получаю сообщение об ошибке: call register type before use user defined type (UDT)

Запустил саму функцию через SQL запрос и она сработала значит ошибка в самом хэндлере, SOS, мучаюсь уже несколько часов вот код

возможно я не правильно вызываю эту функцибю, для подключения к бд использую драйвер github.com/sijms/go-ora/v2. обычные процедуры запускаются без проблем, как вариант написать процедуру под ручку, но я ек хочу таким образом говнокодить, так что надежда пока на вас. вот сам код, в котором вызываю функцию:

var responsibleID string
query := `
BEGIN
:1 := MYDB.RESPONSIBLE_BO.GetContractorIDByName(:2);
END;
`
err = tx.QueryRow(query, sql.Out{Dest: &responsibleID}, req.ResponsibleName).Scan(&responsibleID)
if err != nil {
log.Println("Failed to get ResponsibleID:", err)
ctx.SetStatus(apieasy.InternalServerError, "Failed to get ResponsibleID, error: %v", err)
return
}
Пробовал объявлять переменную, в которую записываю данные из бд:

query := `
DECLARE
v_contractor_id CHAR;
BEGIN
v_contractor_id := MYDB.RESPONSIBLE_BO.GetContractorIDByName(:1);
:2 := contractor_id;
END;
`
не помогло.

вот сам код функции, если будет нужно:

FUNCTION GetContractorIDByName (i_sNAME IN VARCHAR2)
RETURN CHAR
IS
v_res CONTRACTOR.CONTRACTORID % TYPE;
BEGIN
IF (i_sNAME IS NOT NULL)
THEN
BEGIN
SELECT CONTRACTORID
INTO v_res
FROM CONTRACTOR
WHERE NAME = i_sNAME;
EXCEPTION
WHEN NO_DATA_FOUND THEN
CREATECONTRACTOR (i_sNAME, NULL, NULL, 'created by function GetContractorIDByName', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0);
COMMIT;
BEGIN
SELECT CONTRACTORID
INTO v_res
FROM CONTRACTOR
WHERE NAME = i_sNAME;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20002, 'Failed to retrieve newly created contractor TRY AGAIN');
END;
END;
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Undefined nom name');
END IF;
RETURN v_res;
END GetContractorIDByName;
Как считать текст с изображения

Установил тессеракт на убунту

add-apt-repository -y ppa:alex-p/tesseract-ocr-devel && \
apt-get -y update && apt install -y tesseract-ocr* && \
apt install -y libtesseract-dev*`
Испортировал пакет для работы с ним.

go get -t github.com/otiai10/gosseract/v2
Сделал фотку счетчика воды

Фотка

и положил его в папку с main

Написал код по примеру отсюда

package main

import (
"log"

"github.com/otiai10/gosseract/v2"
)

func main() {
client := gosseract.NewClient()
defer client.Close()
client.SetImage("img.png")
text, err := client.Text()
if err != nil {
log.Println(err, "<---")
return
}
log.Println(text)
}
Запустил код

go run .
На выходе ожидал

2024/07/16 12:53:55 00142899
А получил:

2024/07/16 12:53:55 % oi , i
tes a 4
4
А как собстна получить то что я ожидал?
👨🏻‍💻 Вопрос от пользователя


Golang. Вывод суммы в рублях и копейках

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

Текст задачи:

Напишите программу, которая считывает строку и выводит ее предполагаемую цену, 1 символ = 23 копейки в следующем формате:

Y коп. - если цена не дотягивает до рубля.

X р. Y коп. - если цена превышает 1 рубль.

package main

import (
"fmt"
"unicode/utf8"
)

func main() {
var praic float64 = 0.23
var samplText string
var result int
fmt.Scan(&samplText)
result = utf8.RuneCountInString(samplText)
var resultRub float64 = float64(result) * praic
var RUB int = int(resultRub)
if resultRub > 1.00 {
fmt.Printf("%d р. %d коп.", int64(RUB), int((resultRub-float64(RUB))*100))
} else {
fmt.Printf("%d коп.", int(resultRub*100))
}
}

Golang задачи с собеседований
👨🏻‍💻 Вопрос от пользователя


как запустить код на Go?

Я скачал golang, и не понимаю как запустить код. Заранее спасибо
Как может структура реализовывать интерфейс, не реализовав все методы интерфейса?

Создаю свой хендлер для логирования, свомощью пакета slog. По докам я должен реализовать интерфейс Handler. То есть его 4 метода:

Enabled(context.Context, Level) bool
Handle(context.Context, r Record) error
WithAttrs(attrs []Attr) Handler
WithGroup(name string) Handler
Но я пишу такой код:

import (
"context"
"log/slog"
"os"
)

type MyHandler struct {
slog.Handler
}

func (h MyHandler) Handle(ctx context.Context, r slog.Record) error {
return h.Handler.Handle(ctx, r)
}

func main() {
// создаю хендлер
h := &MyHandler{slog.NewJSONHandler(os.Stdout, nil)}
logger := slog.New(h)
logger.Info("Message")
// {"time":"2024-07-04T10:28:45.278528589+04:00","level":"INFO","msg":"Message"}
}
Функция slog.New() принимать только Handler. Для своей структуры MyHandler я реализовал только метод Handle и остальные не реализовал. Значит она не может реализовывать интерфейс Handler. Но все работает. Как это может быть? Компилятор должен послать меня.
Свой VPN на golang

ешил сделать свой VPN на golang. В принципе основную часть сделал:

Программа создаёт виртуальный интерфейс TUN
Подключается к VPN серверу по UDP
И передает данные из TUN на сервер, а с сервера в TUN
На сервере примерно тот же самый сценарий. Как я понял, это уже является VPN (только без шифрования, но это я добавлю). Хотелось бы дать клиенту доступ в интернет, то есть что бы на сервере IP пакеты отправлялись дальше в сеть и с сети клиенту. Это я и не понимаю, как сделать. Всё делаю под Windows.