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. Но все работает. Как это может быть? Компилятор должен послать меня.