Как вывести 'некорректный вод' ,если ввод будет, допустим, -1 7 7?
Все числа равны, если все три числа равны.
Два числа равны, если любые два числа из трех равны.
Все числа разные, если все три введенных числа различаются.
Если во входных данных есть ошибка, например, введены отрицательные числа, то программа должна выводить сообщение Некорректный ввод.
Golang задачи с собеседований
package mainусловия
import "fmt"
func main() {
var a int
var b int
var c int
fmt.Scan(&a, &b, &c)
if a == c && a == b && c == b {
fmt.Println("Все числа равны")
} else if a != c && a != b && c != b {
fmt.Println("Все числа разные")
} else if a == c || a == b || b == c {
fmt.Println("Два числа равны")
} else {
fmt.Println("Некорректный ввод")
}
}
Все числа равны, если все три числа равны.
Два числа равны, если любые два числа из трех равны.
Все числа разные, если все три введенных числа различаются.
Если во входных данных есть ошибка, например, введены отрицательные числа, то программа должна выводить сообщение Некорректный ввод.
Golang задачи с собеседований
panic: runtime error: index out of range [20] with length 14
package main
import "errors"
func GetCharacterAtPosition(str string, position int) (rune, error) {
if position < 0 || position >= len(str) {
return 0, errors.New("position out of range")
}
return []rune(str)[position], nil
}
Выдает ошибку:panic: runtime error: index out of range [20] with length 14 Как исправить?
Golang задачи с собеседований
package main
import "errors"
func GetCharacterAtPosition(str string, position int) (rune, error) {
if position < 0 || position >= len(str) {
return 0, errors.New("position out of range")
}
return []rune(str)[position], nil
}
Выдает ошибку:panic: runtime error: index out of range [20] with length 14 Как исправить?
Golang задачи с собеседований
👨🏻💻 Реальный вопрос от реального человека
Я пытаюсь решить задачу на интерфейсы в GO, но не понимаю что именно у меня не так
Я пытаюсь решить задачу на интерфейсы в GO, но не понимаю что именно у меня не так
package main
import (
"fmt"
"math"
)
type Shape interface {
Area(radius float64) float64
Area(width float64, height float64) float64 #тут у меня ошибка дубликата функции, но я не понимаю как вызывать функции с помощью одинакового имени, если у них не будет одинакового имени в интерфейсе
}
func (s Circle) Area() float64 {
return math.Pi * s.radius * s.radius
}
func (s Rectangle) Area() float64 {
return s.width * s.height
}
type Rectangle struct {
width, height float64
}
type Circle struct {
radius float64
}
func main() {
figure_1 := Circle{radius: 1.0}
fmt.Println(figure_1.Area())
figure_2 := Rectangle{width: 57.2, height: 10.2}
fmt.Println(figure_2.Area())
}
Golang задачи с собеседований👨🏻💻Как сделать так чтоб бот отправлял сообщения в определенный топик?
На golang telebot v3. У треда есть свой chat id?
Golang задачи с собеседований
На golang telebot v3. У треда есть свой chat id?
Golang задачи с собеседований
Почему данная функция в GO при вводе в "1 1 1" не выдает ничего?
Почему данная функция в GO при вводе в "1 1 1" не выдает ничего?
Почему данная функция в GO при вводе в "1 1 1" не выдает ничего?
package main
import (
"fmt"
"math"
)
func SqRoots() {
var a, b, c float64
fmt.Scan(&a, &b, &c)
D := math.Sqrt(b*b - 4*a*c)
if D < 0 {
fmt.Println("0 0")
}
if D == 0 {
fmt.Println((-b + D) / 2 * a)
}
if D > 0 {
fmt.Println((-b-D)/2*a, (-b+D)/2*a)
}
}
func main() {
SqRoots()
}
Golang задачи с собеседованийОшибка "multiple-value in single-value context"
В коде:
Получаю ошибку
Golang задачи с собеседований
В коде:
fmt.Printf("Число фиббоначи для %v: %v", userNum, Fibbonachi(userNum, true))Функция Fibbonachi получает 2 значения (1-е значение - число, второе способ расчета), и возвращает 2 значения (1-е значение - ответ, 2-е значение - ошибка или nil).
Получаю ошибку
multiple-value Fibbonachi(userNum, true) (value of type (int, error)) in single-value contextчто логично, но как мне вывести через Printf только первое возвращаемое значение без ошибки?
Golang задачи с собеседований
Странная ошибка в GO
Golang задачи с собеседований
package mainПо какой-то причине последний if не работает, и на запрос -17 программа ничего не выводит.
import (
"fmt"
)
func main() {
var a int
fmt.Scanln(&a)
if a%2 == 0 && a < 0 {
fmt.Println("Число отрицательное и четное")
} else if a%2 == 1 && a < 0 {
fmt.Println("Число отрицательное и нечетное")
} else if a%2 == 0 && a >= 0 {
fmt.Println("Число положительное и четное")
} else if a%2 == 1 && a >= 0 {
fmt.Println("Число положительное и нечетное")
}
}
Golang задачи с собеседований
Не работает url.Parse
Простой код:
Может я не правильно понимаю работу url.Parse - я думал что если передаваемое значение не url - то в err - должна быть какая-то ошибка...
Golang задачи с собеседований
Простой код:
_, err := url.Parse("555")Но не уходит на ошибку, почему?
if err != nil {
panic(err)
}
Может я не правильно понимаю работу url.Parse - я думал что если передаваемое значение не url - то в err - должна быть какая-то ошибка...
Golang задачи с собеседований
👨🏻💻 Не получается спарсить роли из токена
При регистрации пользователя ему дается роль и в последующем их может становиться больше, то есть логика такая, что у одного пользователя может быть несколько ролей. При входе на сайт бэк делает запрос к бд, где вытаскивает все роли, а также id пользователя, после генерит токен и отсылает на клиента. В дальнейшем этот токен используется для получения доступа к эндпоинтам REST API. Была написана функция, в которой десириализую токен и забираю роли, в ручках потом просто проверяется, есть у этих ролей доступ к ручкам. Ниже приведен код того как генерится токен:
Golang задачи с собеседований
При регистрации пользователя ему дается роль и в последующем их может становиться больше, то есть логика такая, что у одного пользователя может быть несколько ролей. При входе на сайт бэк делает запрос к бд, где вытаскивает все роли, а также id пользователя, после генерит токен и отсылает на клиента. В дальнейшем этот токен используется для получения доступа к эндпоинтам REST API. Была написана функция, в которой десириализую токен и забираю роли, в ручках потом просто проверяется, есть у этих ролей доступ к ручкам. Ниже приведен код того как генерится токен:
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{Далее код, того как десиаризую токен и пытаюсь вытащить роли из него:
"user_id": existingUserID, // получаем запросом к бд
"roles": roles, // получаем запросом к бд
})
log.Printf("user_id: %v\n", existingUserID)
log.Printf("roles: %v\n", roles)
tokenString, err := token.SignedString([]byte(os.Getenv("SECRET_KEY")))
if err != nil {
c.JSON(500, gin.H{"message": "Failed to generate token", "error": err})
return
}
package authВ общем проблема заключается в том, что не находит роли в токене: Roles not found in token. Почему не знаю, уже миллион отладочных выводов сделал, все роли правильно определяются. Вот вывод клэймов: Claims: map[roles:[22 18] user_id:9] скорее всего как-то неправильно пытаюсь их занести в roles, но вроде все правильно.
import (
"errors"
"log"
"os"
"github.com/dgrijalva/jwt-go"
)
func CheckUserRole(tokenString string) ([]string, error) {
log.Printf("Received token: %s", tokenString)
token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
return []byte(os.Getenv("SECRET_KEY")), nil
})
if err != nil || !token.Valid {
log.Printf("Error parsing token: %v", err)
return nil, errors.New("Invalid token")
}
claims, ok := token.Claims.(jwt.MapClaims)
if !ok {
log.Printf("Error getting claims from token")
return nil, errors.New("Invalid token claims")
}
roles, ok := claims["roles"].([]string)
if !ok {
log.Printf("Roles not found in token")
return nil, errors.New("Roles not found in token")
}
log.Printf("User roles: %v", roles)
return roles, nil
}
Golang задачи с собеседований
👨🏻💻 Реальный вопрос от реального человека
Как импортировать модуль в Go
Только начинаю изучать Go и столкнулся с такой проблемой: есть проект, который выглядит так
Подскажите пожалуйста, как можно починить импорты.
Golang задачи с собеседований
Как импортировать модуль в Go
Только начинаю изучать Go и столкнулся с такой проблемой: есть проект, который выглядит так
GoVersionВ server/main.go и client/main.go пытаюсь импортировать Network, но все попытки выдают ошибки. Из того, что пробовал:
-go.mod
-client
--main.go
-network
--Network.go
--mod.go
-server
--main.go
import (package GoVersion/network is not in std
"GoVersion/network"
"fmt"
"net"
)
import (и несколько других вариантов с относительными путями
"fmt"
"net"
"network"
)
package network is not in std
Подскажите пожалуйста, как можно починить импорты.
Golang задачи с собеседований
Пытаюсь сделать ручку на обновление таблицы. Как я могу сделать это эффективнее при помощи sqlx и gin?
type News struct {
ID string `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
Categories string `json:"categories"`
}
var list = []News{}
func getNews(c *gin.Context) {
c.IndentedJSON(http.StatusOK, list)
}
func updateNews(c *gin.Context) {
dbType := os.Getenv("DB_TYPE")
dbName := os.Getenv("DB_NAME")
dbUser := os.Getenv("DB_USER")
dbPasswd := os.Getenv("DB_PASSWD")
dbHost := os.Getenv("DB_HOST")
dbPort := os.Getenv("DB_PORT")
db, err := sqlx.Open(dbType, dbUser+":"+dbPasswd+"@tcp("+dbHost+":"+dbPort+")/"+dbName)
if err != nil {
log.Fatal(err, "Ошибка открытия подключения.")
}
defer db.Close()
// Установка максимального количества открытых соединений в пуле
db.SetMaxOpenConns(10)
// Установка максимального количества соединений, которые могут быть одновременно использованы
db.SetMaxIdleConns(5)
// Проверка подключения к базе данных
err = db.Ping()
if err != nil {
log.Fatal(err, " Не удалось подключиться к базе.")
}
// Выполнение запросов к базе данных
rows, err := db.Query("SELECT news.Id, news.Title, news.Content, group_concat(newscategories.CategoryId separator ', ') as categories FROM news left join newscategories on news.Id=newscategories.NewsId group by news.Id;")
if err != nil {
log.Fatal(err)
//success := false
}
defer rows.Close()
// Обработка результатов запроса
for rows.Next() {
var id string
var title string
var content string
var categories string
err := rows.Scan(&id, &title, &content, &categories)
if err != nil {
log.Fatal(err)
}
nnews := News{ID: id, Title: title, Content: content, Categories: categories}
list = append(list, nnews)
fmt.Println(list)
}
if err = rows.Err(); err != nil {
log.Fatal(err)
}*/
id := c.Param("id")
for i, a := range list {
if a.ID == id {
c.BindJSON(&a)
list[i] = a
nid := c.Query(a.ID)
ntitle := c.Query(a.Title)
ncont := c.Query(a.Content)
ncatg := c.Query(a.Categories)
db, err := sqlx.Open(dbType, dbUser+":"+dbPasswd+"@tcp("+dbHost+":"+dbPort+")/"+dbName)
_, err = db.Exec("update news SET news.Id = ?, news.Title = ? , news.Content = ?, news.Categories = ? WHERE news.Id = ?;", nid, ntitle, ncont, ncatg, nid)
if err != nil {
log.Fatal(err)
}
c.IndentedJSON(http.StatusOK, a)
return
}
}
c.IndentedJSON(http.StatusNotFound, gin.H{"message": "news not found"})
}
Golang задачи с собеседованийСервер gin возвращает 404 ошибку в браузере
Данный код не работает в браузере, но работает через curl.
Данный код не работает в браузере, но работает через curl.
package mainGolang задачи с собеседований
import (
"net/http"
"github.com/gin-gonic/gin"
)
type News struct {
ID string `json:"id"`
Title string `json:"title"`
}
var result = []News{{ID: "0", Title: "sdfsdfsdf"}}
func getAlbums(c *gin.Context) {
c.IndentedJSON(http.StatusOK, result)
}
func main() {
router := gin.Default()
router.GET("/result", getAlbums)
router.Run("localhost:8080")
}