Неважно, как долго вы программируете на любимом языке, вы все равно будете находить новые маленькие детали, которые вас будут приятно удивлять. В статье предлагаю 5 небольших советов в языке Go, которые я недавно узнал и о существовании которых не подозревал.
Заставьте компилятор подсчитывать элементы массива
В Go вы нечасто используете массивы. Вместо них вы используете срезы (слайсы, slices), но если вам надоело писать количество элементов в массиве самостоятельно, вы можете использовать […]
, и компилятор посчитает их за вас:
package main
import "fmt"
func main() {
arr := [3]int{1, 2, 3}
sameArr := [...]int{1, 2, 3} // Use ... instead of 3
// Arrays are equivalent
fmt.Println(arr)
fmt.Println(sameArr)
}
Используйте go run .
вместо go run main.go
Всякий раз, когда я начинаю создавать прототипы в Go, мне нравится начинать с файла main.go:
package main
import "fmt"
func main() {
sayHello()
}
func sayHello() {
fmt.Println("Hello!")
}
Но когда файл main.go становится большим, мне нравится разбивать мои структуры на отдельные файлы, используя один и тот же основной пакет. Однако если у меня есть следующие файлы…
main.go
package main
func main() {
sayHello()
}
say_hello.go
package main
import "fmt"
func sayHello() {
fmt.Println("Hello!")
}
Набрав go run main.go
, вы получите следующую ошибку:
# command-line-arguments
./main.go:4:2: undefined: sayHello
Чтобы решить эту проблему, воспользуйтесь командой go run .
.
Используйте подчеркивание, чтобы сделать числа более читаемыми
Знаете ли вы, что с помощью подчеркивания можно сделать длинные числа более удобочитаемыми?
package main
import "fmt"
func main() {
number := 10000000
better := 10_000_000
fmt.Println(number == better)
}
В одном пакете можно иметь разные тестовые пакеты
В Go я думал, что в одной папке может быть только 1 пакет. Это не совсем так. Для пакета под названием yourpackage
в том же каталоге может быть еще один пакет под названием yourpackage_test
, в котором вы можете написать свои тесты.
Зачем вам это нужно? Вы можете написать свои тесты, используя тот же пакет yourpackage
, но при этом будут доступны и неэкспортированные функции. Написав тесты в yourpackage_test
, вы убедитесь, что тестируете только открытое поведение.
Передача одного и того же аргумента несколько раз
При использовании функций форматирования строк меня всегда раздражало, что приходится повторять аргумент, который используется несколько раз:
package main
import "fmt"
func main() {
name := "Bob"
fmt.Printf("My name is %s. Yes, you heard that right: %s\n", name, name)
}
Очевидно, есть более удобный способ. Вы можете передать его только один раз и использовать его порядок в %s
с помощью %[order]s
:
package main
import "fmt"
func main() {
name := "Bob"
fmt.Printf("My name is %[1]s. Yes, you heard that right: %[1]s\n", name)
}
Совет найден в Твиттере Джона Эриксона:
Надеюсь, сегодня вы узнали что-то новое. Если вам понравился перевод или у вас есть вопрос, пожалуйста, свяжитесь со мной, например, в Linkedin, чтобы оставаться на связи.