TGStat
TGStat
Qidiruv uchun matnni kiriting
Ilg‘or kanal qidiruvi
  • flag Uzbek
    Sayt tili
    flag Russian flag English flag Uzbek
  • Saytga kirish
  • Katalog
    Kanal va guruhlar katalogi Hududiy to‘plamlar Tematik to‘plamlar Платные каналы Kanallar qidiruvi
    Kanal/guruh qo‘shish
  • Reytinglar
    Kanallar reytingi Guruhlar reytingi Postlar reytingi
    Brendlar va shaxslar reytingi
  • Analitika
  • Postlarda qidiruv
  • Telegram'ni kuzatish
  • Targ‘ibot
    Yandex Business orqali reklama TGStat Agency orqali kanallarda reklama TGStat.ru saytida reklama
Cross Join - канал о разработке

23 Aug, 12:13

Telegram'da ochish Ulashish Shikoyat qilish

В Go 1.27, который вышел 19 августа, есть несколько любопытных изменений в самом языке.

Дженерики на методах

Раньше методы могли использовать параметры типов своего receiver’а, но не могли объявлять дополнительные. Теперь могут.


type Box[T any] struct {
Value T
}

func (b Box[T]) Map[U any](fn func(T) U) Box[U] {
return Box[U]{Value: fn(b.Value)}
}


Чувствую, теперь будут повсеместно фигачить магические цепочки типа таких:


result := Box[int]{Value: 42}.
Map(strconv.Itoa).
Map(func(s string) int {
return len(s)
})

fmt.Println(result.Value) // 2


С одной стороны, это хорошо для стандартной библиотеки: её API можно будет делать более гибкими. С другой стороны, чем больше обобщённых языковых конструкций, тем больше контекста может понадобиться LLM, чтобы понять, что скрывается за таким выражением.

Кстати, у Google недавно была статья, в которой они утверждали, что Go — чуть ли не лучший язык для LLM.

Интерфейсные методы по-прежнему не могут иметь собственные параметры типов, а generic-метод не может реализовать обычный метод интерфейса


Далее, поля embedded структур теперь инициализируются проще.



type Contact struct {
Email string
Phone string
}

type User struct {
Name string
Contact
}


Раньше приходилось писать так:


user := User{
Name: "Анна",
Contact: Contact{
Email: "anna@example.com",
Phone: "+7 999 000-00-00",
},
}


Теперь можно делать так:


user := User{
Name: "Анна",
Email: "anna@example.com",
Phone: "+7 999 000-00-00",
}


Опять же, меньше писанины, больше магии.

Улучшился вывод типов generic-функций

Например, есть функция, которая превращает значение в строку:


func FormatValue[T any](value T) string {
return fmt.Sprint(value)
}


И мы хотим добавить её в список форматтеров.

Раньше тип приходилось указывать явно:


formatters := map[string]func(int) string{
"default": FormatValue[int],
"hex": func(value int) string {
return fmt.Sprintf("0x%x", value)
},
}


В Go 1.27 можно не писать [int]


formatters := map[string]func(int) string{
"default": FormatValue,
"hex": func(value int) string {
return fmt.Sprintf("0x%x", value)
},
}


Компилятор видит, что значения map должны иметь тип func(int) string, и сам выводит для FormatValue параметр T = int.

Не знаю, честно говоря, насколько это всё важно, потому что код пишет теперь LLM, а ему и так было норм 🙂

Интереснее то, что наконец-то затащили json/v2, который тупо в разы быстрее при анмаршаллинге.

1.6k 0 7 2 16
Katalog
Kanal va guruhlar katalogi Kanallar to‘plamlari Kanallar qidiruvi Kanal/guruh qo‘shish
Reytinglar
Telegram-kanallar reytingi Telegram-guruhlar reytingi Postlar reytingi Brendlar va shaxslar reytingi
API
Statistika API'si Postlar qidiruvi API'si API Callback
Kanallarimiz
@TGStat @TGStat_Chat @telepulse @TGStatAPI
O‘qish
Академия TGStat Telegram tadqiqoti 2019 Telegram tadqiqoti 2021 Telegram tadqiqoti 2023
Kontaktlar
Справочный центр Qo‘llab-quvvatlash Email Vakansiyalar
Har xil narsalar
Foydalanuvchi shartnomasi Maxfiylik siyosati Ommaviy oferta
Botlarimiz
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot