Язык Go и зачем нужен был ещё один язык
от StarTek
Хочу рассказать вам об относительно новом языке Go. Также часто называемый Golang. Искать что-нибудь в интернете нужно искать с приставкой golang, иначе всякие сайты про CS:GO будут))
Ой. Ну короче. Языку Go - 5 лет. Молодой язык взял свое начало в недрах Google. Разработчики языка Си и Unix (Кен Томпсон) и Роб Пайк задумались, а каким должен быть хороший язык программирования. Здесь они решили, что язык будет компилируемый и главной фичей языка будет многопоточность и отдельный синтаксический сахар для потоков и каналов. Почему они так сделали? В текущих реалиях мощности компьютера увеличиваются а программы все еще работают в одном потоке. Нужно было это как-то исправить.
Об остальных фичах коротко - статическая типизация, сборщик мусора, упрощенный ооп (его почти нет) с интерфейсами и структурами (которым можно объявлять функции или методы). Хочу остановиться на последнем:
Сейчас конечно, вы этот код не запустите. Это просто пример синтаксиса. А если вы знакомы с языком и компилятор установлен:
Язык задумывался так, что не нужны никакие Makefile, Ant, Gradle. А также, чтобы скачать дополнительные библиотеки вам необходимо установить git (или cvs, смотря откуда код качаете), и установить библиотеку. К примеру, Go на Android и iOS (перед этим установить git):
Тоесть, go get аналог ruby gem.
Вернемся к ООП, рассмотрим интерфесы:
Вы наверное зададите вопрос - а что, можно возвращать несколько значений? Да, можно. Так как в языке нету try-catch, то многие функции в качестве второго значения возвращают ошибку. К примеру:
Да, иногда в коде очень много обработок ошибок. Причем, они немного портят код.
Так, если вы объявили интерфейс, то наверное хотите реализовать его, да? Реализация очень проста - объявляете этот метод в своем типе.
Считайте, что вы реализовали интерфейс. А дальше вы можете использовать этот тип в других функция, которые принимают параметр io.Reader:
Компилятор сам проверит все соответсвия и все сделает.
Сразу говорю - писать статьи я не умею. Так что вопросы и исправления этой разноненной информации в комментариях пишите! Возможно в следующий раз что-нибудь еще напишу!
Ой. Ну короче. Языку Go - 5 лет. Молодой язык взял свое начало в недрах Google. Разработчики языка Си и Unix (Кен Томпсон) и Роб Пайк задумались, а каким должен быть хороший язык программирования. Здесь они решили, что язык будет компилируемый и главной фичей языка будет многопоточность и отдельный синтаксический сахар для потоков и каналов. Почему они так сделали? В текущих реалиях мощности компьютера увеличиваются а программы все еще работают в одном потоке. Нужно было это как-то исправить.
Об остальных фичах коротко - статическая типизация, сборщик мусора, упрощенный ооп (его почти нет) с интерфейсами и структурами (которым можно объявлять функции или методы). Хочу остановиться на последнем:
- // объявление своего типа (alias)
- package main // запускаемое приложение
- // должно быть объявлено с пакетом main
- type Vector [3]float64
- // псевдо-конструктор
- func NewVector(x, y, z float64) *Vector {
- // Создаем объект и берем его адрес
- return &Vector{x, y, z}
- }
- // функция вектора
- func (v *Vector) Add(other *Vector) *Vector {
- return &Vector{v[0]+other[0], v[1]+other[1], v[2]+other[2]}
- }
- // точка входа в приложение
- func main() {
- var a *Vector
- a = NewVector(2, 2, 2)
- // короткое объявление
- b := NewVector(1, 1, 1)
- c := a.Add(b)
- // вывод в консоль
- fmt.Println(c)
- }
- go run main.go // запуск
- go build -o main main.go // компиляция
- go get golang.org/x/mobile/cmd/gomobile
Вернемся к ООП, рассмотрим интерфесы:
- package io
- type Reader interface {
- Read(b []byte) (int, error)
- }
- type Writer interface {
- Write(b []byte) (int, error)
- }
- var b []byte
- b = make([]byte, 16)
- n, err := os.Stdin.Read(b)
- if err != nil {
- // возникла ошибка
- panic(err)
- }
Так, если вы объявили интерфейс, то наверное хотите реализовать его, да? Реализация очень проста - объявляете этот метод в своем типе.
- type FileReader struct {
- fd int
- }
- func (fr *FileReader) Read(b []byte) (n int, err error) {
- // читаем из файла
- }
- fmt.Fprintln(myfilereader, "Hello world!")
Сразу говорю - писать статьи я не умею. Так что вопросы и исправления этой разноненной информации в комментариях пишите! Возможно в следующий раз что-нибудь еще напишу!