Всем привет, я жареная рыба.
Когда мы смотрим на общий код Go1.18, я не знаю, замечено ли какое-либо новое ключевое слово.
Примеры следующие:
func Print[T any](s []T) {}
Я не упоминал об этом раньше, но кто-нибудь думает, что это ключевое слово является эксклюзивным для универсального кода?
Не совсем... В этом новом обновлении Go1.18 любое появляется как новое ключевое слово,у любого есть реальное тело, которое, по сути, является псевдонимом интерфейса {}:
type any = interface{}
То есть в обычном коде можно использовать и напрямую:
func f(a any) {
switch a.(type) {
case int:
fmt.Println("进脑子煎鱼了")
case float64:
fmt.Println("煎鱼进脑子了")
case string:
fmt.Println("脑子进煎鱼了")
}
}
func main() {
f(2)
f(3.1415)
f("煎鱼好!")
}
С точки зрения использования новое ключевое слово any будет намного удобнее, чем interface{}, ведь так быстрее набирать много слов меньше, по сути, оно тоже относится к существующему типу рун.
Сравнение после добавления новых ключевых слов выглядит следующим образом:
длинное заявление | короткое заявление |
---|---|
func f[T interface{}](s []T) []T | func f[T any](s []T) []T |
func f(a interface{}) | func f(a any) |
var a interface{} | var a any |
После того, как мы поймем его удобство, с точки зрения согласованности кода и читабельности, есть некоторые проблемы, которые вызовут определенные сомнения.
Поэтому два дня назад кто-то предложил "all: rewrite interface{} to any》, планирую переписать весь внутренний код.
Вы можете подумать, что это ручная модификация человеческой плоти? Это определенно не так, Go официально запустила CL для пакетной модификации.
В наших повседневных проектах мы можем, как и они, напрямую заимствовать набор инструментов Go для реализации замены.
следующее:
gofmt -w -r 'interface{} -> any' ./...
Когда я услышал эту новость, мой друг Сяньюй был потрясен, задаваясь вопросом, станет ли интерфейс {} делом прошлого и будет ли он полностью заменен новым ключевым словом any?
Очевидно, что нет. так какGo1 имеет гарантию совместимости, точно не будут удалены на данном этапе. Однако в будущем будет явление, то есть в нашем проекте Go некоторые люди используют любой, а некоторые используют интерфейс {}, что будет мешать людям с точки зрения читабельности кода.
Однако мы также можем изучить официальный язык Go и использовать инструмент gofmt в процессе линтеринга, чтобы принудительно заменить все интерфейсы {} любыми для достижения согласованности кода.
Это изменение ощущается какэстетикавопрос, что вы думаете по этому поводу? Вы также хотите, чтобы что-то имело псевдоним,Добро пожаловать, чтобы оставить сообщение и обменяться в области комментариев:)
Если у вас есть какие-либо вопросы, пожалуйста, оставьте отзыв и обменяйтесь мнениями в области комментариев.Лучшие отношения - это достигать друг друга, твойкакэтожареная рыбаСамая большая мотивация для творчества, спасибо за поддержку.
Статья постоянно обновляется, вы можете прочитать ее в WeChat, выполнив поиск по запросу [Brain Fried Fish], эта статьяGitHub GitHub.com/Vicious Genetics/Нет...Он был включен, вы можете посмотреть его, чтобы выучить язык GoИди Изучай Карты и Маршруты, Добро пожаловать в Star, чтобы призвать вас к обновлению.