Новое ключевое слово Any в Go. Уйдет ли интерфейс{} в прошлое?

Go

Всем привет, я жареная рыба.

Когда мы смотрим на общий код 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, чтобы призвать вас к обновлению.