Go tests
7.78K subscribers
304 photos
3 videos
100 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥полезные ит-каналы

https://xn--r1a.website/Golang_google - Golang программирование

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golang_jobsgo - go chat jobs
Download Telegram
Какой тип будет иметь value при переборе строки с помощью for range
Anonymous Quiz
28%
byte
61%
rune
6%
int
5%
string
Что не так с этим кодом на Go? И чего вы ожидаете на выходе?


package main

func main() {
const (
iota = iota
Y
)
println(Y)
}



На первый взгляд - всё понятно. Но на самом деле это ловушка 😏


Вы переопределяете iota как обычную константу, равную самой себе (iota = iota). С этого момента iota перестаёт быть магической переменной, и счётчик сбрасывается.
Поэтому Y получает значение 0, а не 1 — как многие ожидают.

Вывод программы: 0

💡 Мораль: никогда не переназначайте iota внутри const, иначе потеряете её «магию».

Запустить код: https://go.dev/play/p/7xu1qRUcp2O
👍61🔥1😢1
👣 Что выведет код ?



package main

import (
"encoding/json"
"fmt"
"reflect"
)

type S struct {
A []int `json:"a"`
B []int `json:"b"`
}

func main() {
var a []int // nil
b := []int{} // пустой
fmt.Println(a == nil, len(a), cap(a)) // ?
fmt.Println(b == nil, len(b), cap(b)) // ?

fmt.Println(reflect.DeepEqual(a, b)) // ?

x := S{A: a, B: b}
d, _ := json.Marshal(x)
fmt.Println(string(d))
}


Ответ:
true 0 0
false 0 0
false
{"a":null,"b":[]}


👉 Запустить код: https://go.dev/play/p/PaqGcSwGqpV
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥43
Как вызвать встроенный race detector при запуске Go-программы
Anonymous Quiz
40%
go run -race
7%
go build -race
25%
go test -race
29%
Все варианты верны
1
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Go: Тонкая ловушка - typed nil в интерфейсе.

Если присвоить интерфейсу значение nil конкретного типа, сравнение с nil вернёт false, потому что у интерфейса уже есть динамический тип. Запомни правило: интерфейс равен nil только когда и тип отсутствует, и значение nil.


package main

import (
"fmt"
"os"
)

func main() {
var err error = (*os.PathError)(nil)
fmt.Println(err == nil)
}


https://www.youtube.com/shorts/vobogCxfoLk
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤯42
🔥71🥰1
Что выведет код
Anonymous Quiz
14%
[1, 2, 3]
14%
[3, 2, 1]
57%
[1, 3, 2]
15%
[2, 3, 1]
👍2
👣 Что выведет код (Go 1.25)?


package main

import "fmt"

func main() {
s := []int{1, 2, 3, 4}
t := s[1:3] // t = [2, 3]
t = append(t, 99) // возможно, меняет s[3]
s[2] = 42 // изменяем s напрямую

fmt.Println("s:", s)
fmt.Println("t:", t)
}


Ответ :

s: [1 2 42 99]
t: [2 42 99]


⚡️ Запустить код: https://go.dev/play/p/96RGE1ea6Sq
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥43🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Вот ещё одна задача на Go, которая проверяет знание интерфейсов, nil и типов - частая ловушка даже для опытных разработчиков


package main

import (
"errors"
"fmt"
)

type myError struct{}

func (m *myError) Error() string {
return "something went wrong"
}

func returnsNilError() error {
var e *myError = nil
return e
}

func main() {
err := returnsNilError()
fmt.Println("err == nil:", err == nil) // неожиданно false
fmt.Println("err:", err)
}


Вывод: err == nil: false
err: something went wrong


⚡️ Заплатить код: https://go.dev/play/p/lrw5DEthEvS

@golangtests
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 САМЫЙ ЭФФЕКТИВНЫЙ АЛГОРИТМ ПОИСКА В GO

Бинарный поиск - один из самых быстрых способов найти элемент в отсортированном слайсе. Вместо полного прохода он делит диапазон пополам, работая за O(log n). Используй его везде, где данные можно заранее отсортировать - прирост скорости огромный.


package main
import "fmt"

func binSearch(a []int, t int) bool {
l, r := 0, len(a)-1
for l <= r {
m := (l + r) / 2
if a[m] == t { return true }
if a[m] < t { l = m + 1 } else { r = m - 1 }
}
return false
}

func main() {
nums := []int{1,4,7,9,15,20,33,42}
fmt.Println(binSearch(nums, 33))
fmt.Println(binSearch(nums, 100))
}
👍53🔥2