👨🏻💻 Вопрос от пользователя
После ввода команды в терминал ничего не происходит
После ввода команды (go env -w GOINSECURE=«имя проекта») в терминал ничего не происходит, в чем может быть проблема ?
Golang задачи с собеседований
После ввода команды в терминал ничего не происходит
После ввода команды (go env -w GOINSECURE=«имя проекта») в терминал ничего не происходит, в чем может быть проблема ?
Golang задачи с собеседований
👍2
  👨🏻💻 Вопрос от пользователя
Я новичок в вебе и хочу отправить данные из моего API в другой API, но мой API отправляет, а другой почему-то не получает
Функция отправляющая данные:
  
эта функция получает данные, но выдает ошибку:
Когда я отправляю запрос из первой функции, я получаю:
Но вторая функция выдаёт:
Golang задачи с собеседований
Я новичок в вебе и хочу отправить данные из моего API в другой API, но мой API отправляет, а другой почему-то не получает
func main() {
    r := gin.Default()
    r.POST("/send-data", func(c *gin.Context) {
        var token struct {
            Api_key string `json:"accsestoken"`
        }
        var data struct {
            Phone  string  `json:"phone"`
            Amount float64 `json:"amount"`
        }
        if err := c.BindJSON(&data); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid JSON"})
            return
        }
        token.Api_key = tools.Create_token(data.Phone, data.Amount)
        local_id := uuid.New()
        payload := map[string]interface{}{
            "api_key":  token.Api_key,
            "phone":    data.Phone,
            "amount":   data.Amount,
            "local_id": local_id.String(),
        }
        res, err := json.Marshal(payload)
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to prepare data"})
            return
        }
        resp, err := http.Post("http://localhost:8000/api/trxs", "application/json", bytes.NewBuffer(res))
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to send data to target API"})
            return
        }
        defer resp.Body.Close()
        c.JSON(http.StatusOK, gin.H{"message": "Data sent successfully"})
    })
    r.Run(":3000")
} Функция отправляющая данные:
  r.POST("/api/trxs", func(c *gin.Context) {
        var data struct {
            Api_key  string  `json:"api_key"`
            Phone    string  `json:"phone"`
            Amount   float64 `json:"amount"`
            Local_id string  `json:"local_id"`
        }
        if err := c.ShouldBindJSON(&data); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"unsuccess": false, "error": err.Error()})
            return
        }
        fmt.Println(data)
        // Возвращение данных клиенту
        c.JSON(http.StatusOK, data)
    })
    r.Run(":8000")эта функция получает данные, но выдает ошибку:
{
    "error": "EOF",
    "unsuccess": false
} Когда я отправляю запрос из первой функции, я получаю:
{
    "message": "Data sent successfully"
}Но вторая функция выдаёт:
{
    "error": "EOF",
    "unsuccess": false
}Golang задачи с собеседований
❤3👍2
  👨🏻💻 Вопрос от пользователя
Есть ли брокеры сообщений где можно сохранять объекты?
Прошу не пинать если вопрос глупый.
В пет-проекте понадобился брокер сообщений. Я пробовал натс но он работает только со строками.
А есть ли такие брокеры, которые умеют работать гибридно(pub/sub+p2p) и, главное, могут сохранять не только строки а ещё и объекты(структуры, мапы и т.д). P2P в приоритете, а гибрид необязательно но это задел на будущий функционал.
Да, знаю, что можно запаковать объект в json и сохранять как строку, но это накладные расходы на распаковку/запаковку каждой транзакции.
Да, работа ведётся с транзакциями, которые один пользователь запрашивает у другого. Может кто то считает что брокеры для этого не лучший вариант и знает вариант получше?
Golang задачи с собеседований
  Есть ли брокеры сообщений где можно сохранять объекты?
Прошу не пинать если вопрос глупый.
В пет-проекте понадобился брокер сообщений. Я пробовал натс но он работает только со строками.
А есть ли такие брокеры, которые умеют работать гибридно(pub/sub+p2p) и, главное, могут сохранять не только строки а ещё и объекты(структуры, мапы и т.д). P2P в приоритете, а гибрид необязательно но это задел на будущий функционал.
Да, знаю, что можно запаковать объект в json и сохранять как строку, но это накладные расходы на распаковку/запаковку каждой транзакции.
Да, работа ведётся с транзакциями, которые один пользователь запрашивает у другого. Может кто то считает что брокеры для этого не лучший вариант и знает вариант получше?
Golang задачи с собеседований
👨🏻💻 Вопрос от пользователя
Как получить доступ к полям интерфейсного типа если знаю, что там за структура?
Есть
Golang задачи с собеседований
  Как получить доступ к полям интерфейсного типа если знаю, что там за структура?
Есть
type Mover interface {
    Move()
}
type M struct {
    Name string
    Age  int
}
func doMoving(mover Mover) {
    mover.Move()
    // Если я знаю, что у меня под mover-ом структура M 
    //то как я могу получить в этом месте доступ к полям Name и Age?
    // Чтобы можно было как то так:
    // fmt.Println(mover.Name)
}Golang задачи с собеседований
👨🏻💻 Вопрос от пользователя
Уведомлять пользователей telegram через определённый промежуток времени Golang
У меня есть телеграмм бот, который по взаимодействию с пользователем работает по типу "Запрос-ответ". Необходимой функцией этого бота является уведомлять пользователей в 9 утра о том, что нужно ввести новые данные с которыми он будет работать. Проблема заключается в том, что я не понимаю, как мне проверять текущее время периодически, поскольку код, который я использую для телеграмм бота, заканчивается входом в цикл for update := range updates , но внутри этого цикла, судя по логированию, я попадаю только, когда получаю сообщения от пользователя. Скорее всего я не до конца понимаю некоторых особенностей методов go-telegram-bot-api
Golang задачи с собеседований
  Уведомлять пользователей telegram через определённый промежуток времени Golang
У меня есть телеграмм бот, который по взаимодействию с пользователем работает по типу "Запрос-ответ". Необходимой функцией этого бота является уведомлять пользователей в 9 утра о том, что нужно ввести новые данные с которыми он будет работать. Проблема заключается в том, что я не понимаю, как мне проверять текущее время периодически, поскольку код, который я использую для телеграмм бота, заканчивается входом в цикл for update := range updates , но внутри этого цикла, судя по логированию, я попадаю только, когда получаю сообщения от пользователя. Скорее всего я не до конца понимаю некоторых особенностей методов go-telegram-bot-api
func main() {
    // используя токен создаем новый инстанс бота
    bot, err := tgbotapi.NewBotAPI(telegramBotToken)
    if err != nil {
        log.Panic(err)
    }
    bot.Debug = true
    log.Printf("Авторизация аккаунта бота %s", bot.Self.UserName)
    // u - структура с конфигом для получения апдейтов
    u := tgbotapi.NewUpdate(0)
    u.Timeout = 1
    // используя конфиг u создаем канал в который будут прилетать новые сообщения
    updates := bot.GetUpdatesChan(u)
    err = callAt(11, 17, 0, myfunc)
    if err != nil {
        fmt.Printf("error: %v\n", err)
    }
    //обработка сообщений
    for update := range updates {
        reply := "Не знаю что сказать"
        msg := tgbotapi.NewMessage(update.Message.Chat.ID, reply)
        msg.ReplyMarkup = board_StartCommand
        if update.Message == nil {
            continue
        }
        if _, err := bot.Send(msg); err != nil {
            log.Panic(err)
        }
    }
}Golang задачи с собеседований
👨🏻💻 Вопрос от пользователя
spf13/viper не может прочитать файл
По аналогии с https://github.com/gogjango/gjango/blob/master/config/config.go
вывод
    
сам файл в папке есть. ось - убунта. права 0775 накинул
Golang задачи с собеседований
  spf13/viper не может прочитать файл
По аналогии с https://github.com/gogjango/gjango/blob/master/config/config.go
package config
import (
"fmt"
"log"
"os"
"path/filepath"
"read-clickhouse/tools"
"runtime"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
)
func check() {
_, filePath, _, _ := runtime.Caller(0)
configName := "config.dev.yaml"
configPath := filePath[:len(filePath)-9] + "files" + string(filepath.Separator)
filename := fmt.Sprintf("%s%s", configPath, configName)
if _, err := os.Stat(filename); err == nil {
fmt.Println("Файл существует")
} else if os.IsNotExist(err) {
fmt.Println("Файл не существует")
} else {
fmt.Println("Ошибка при проверке файла:", err)
}
}
// Load returns Configuration struct
func Load(env string) *Configuration {
check()
_, filePath, _, _ := runtime.Caller(0)
configName := "config." + env + ".yaml"
configPath := filePath[:len(filePath)-9] + "files" + string(filepath.Separator)
tools.DebugPrintf(configName)
viper.SetConfigName(configName)
viper.AddConfigPath(configPath)
err := viper.ReadInConfig()
if err != nil {
log.Fatal(err)
}
var config Configuration
viper.Unmarshal(&config)
setGinMode(config.Server.Mode)
return &config
}
// Configuration holds data necessery for configuring application
type Configuration struct {
Server *Server `yaml:"server"`
}
// Server holds data necessary for server configuration
type Server struct {
Mode string `yaml:"mode"`
}
func setGinMode(mode string) {
switch mode {
case "release":
gin.SetMode(gin.ReleaseMode)
break
case "test":
gin.SetMode(gin.TestMode)
break
default:
gin.SetMode(gin.DebugMode)
}
}
вывод
go run main.go
    Файл существует
    [/home/des/proj/go-read-clickhouse/config/config.go:read-clickhouse/config.Load 38] 
    %!(EXTRA string=config.dev.yaml)
    2024/02/02 16:34:51 Config File "config.dev.yaml" Not Found in "[/home/des/proj/go-read-clickhouse/config/files]"
    exit status 1
    make: *** [Makefile:2: run] Ошибка 1сам файл в папке есть. ось - убунта. права 0775 накинул
Golang задачи с собеседований
What does the following program print?
  Anonymous Quiz
    11%
    [0 1 2 3] [0 2 3 3 3]
      
    19%
    [0 2 3 3] [0 2 3 3 3]
      
    49%
    [0 1 2 3] [0 2 3 2 3]
      
    21%
    [0 2 3 3] [0 2 3 2 3]
      
    👎13👍5
  What does the following program print?
  Anonymous Quiz
    18%
    0A,1B,2C,
      
    21%
    0A,1Z,2Z,
      
    13%
    0A,1M,2C,
      
    4%
    0A,1Z,2M,
      
    36%
    (infinite loop)
      
    8%
    0A,1M,2Z,
      
    🤡7
  🤮19👍2🤔1
  