Настройка VS Code для работы с Go (начало)
Итак, вы наткнулись на очередную статью, которая не помогла. Или ответ искусственного идиота чат-бота оказался бесполезен.
Логично предположить, что для начала работы нам понадобится Go и VS Code, качаем их по соответствующим ссылкам:


Выбирайте свою ОС и качайте, в случае с Linux — можете поставить это из репозиториев, так будет даже правильнее, зря что ли мэйнтейнеры свои сухари с водой едят?
Процесс установки я опущу, он прост до безобразия (далее-далее-далее...)
Самое интересное, что просто так вы не сможете открыть студию и тут же начать писать hello в рот... Требуются небольшие доп. манипуляции:
1. Жамкаем в открытой VS Code Ctrl+Shift+P и выбираем (и/или впечатываем) — Go: Install/Update tools, не заморачиваемся, выбираем все пункты и жамкаем «OK».

устанавливаем

2. После скачивания и установки этих тулз идем в расширения (Ctrl+Shift+X) и выбираем там Go, устанавливаем

3. Чтобы наши волосы были мягкими и шелковистыми у нас всё заработало, создаём мод файл, допустим, командой go mod init

Далее мы можем проверить как оно работает и работает ли вообще. Писать hello в рот скучно, предлагаю набросать код, который берёт гусары молчать время с какого-нибудь NTP-сервера.
Допустим так:
package main
import (
"fmt"
"net"
"time"
)
func main() {
conn, err := net.Dial("udp", "pool.ntp.org"+":123") //сервер и порт можете использовать на свой выбор
if err != nil {
fmt.Printf("could not connect to NTP server") //ну, не подключились, так не подключились...
}
defer conn.Close()
var ntpPacket = make([]byte, 48) //инициализируем пакет
ntpPacket[0] = 0x1B //версия 3
// отправляем запрос
if _, err := conn.Write(ntpPacket); err != nil {
fmt.Printf("could not send NTP request") //ну, не отправили, так не отправили...
}
// читаем ответ
if err := conn.SetReadDeadline(time.Now().Add(10 * time.Second)); err != nil {
fmt.Printf("could not set read deadline") //и опять проверяем — всё ли хорошо
}
if _, err := conn.Read(ntpPacket); err != nil {
fmt.Printf("could not read NTP response") //и умеем ли мы читать )
}
// извлекаем и всё такое —
seconds := uint32(ntpPacket[40])<<24 | uint32(ntpPacket[41])<<16 | uint32(ntpPacket[42])<<8 | uint32(ntpPacket[43])
fraction := uint32(ntpPacket[44])<<24 | uint32(ntpPacket[45])<<16 | uint32(ntpPacket[46])<<8 | uint32(ntpPacket[47])
// подробнее можете почитать про time в Go — https://golangify.com/go/time
ntpEpoch := time.Date(1900, 1, 1, 0, 0, 0, 0, time.UTC)
ntpTime := ntpEpoch.Add(time.Duration(seconds)*time.Second + time.Duration(fraction*1000000000/4294967)*time.Millisecond) //миллисекундной точности нам хватит
var time = ntpTime //не хочу заморачиваться с приведением типов
fmt.Printf(time.Format("2006/02/01 15:04:05"))
}
Пробуем запустить, нажав F5

Вот и всё, пользуемся =)