Go

Материал из Xgu.ru

Перейти к: навигация, поиск

Go — язык программирования со статической типизацией, синтаксически отдалённо напоминающий Си, обладающий рядом интересных особенностей, в частности удобными механизмами для написания конкурентных программ, такими как горутины (goroutines), каналы и проч. Компилируется в машинный код. Есть поддержка LLVM.

Есть два компилятора Go:

  • gc, основной компилятор;
  • GCC, который поддерживает компиляцию Go в код любой платформы, которую поддерживает GCC.

Содержание

[править] Возможности Go

Что есть в Go?

  • сборщик мусора (garbage collection);
  • система управления пакетами (package management);
  • функции первого класса;
  • лексическая область видимости;
  • интерфейс системных вызовов;
  • неизменяемые строки (immutable strings) в UTF-8.


[править] Возможности, которых нет в Go

Чего нет в Go?

  • Неявного преобразования типов чисел;
  • Нет конструкторов и деструкторов;
  • Нет перегрузки операторов (operator overloading);
  • Нет значений параметров по умолчанию (default parameter values);
  • Нет наследования;
  • Нет обобщений (generics);
  • Нет исключений (exceptions);
  • Нет макросов;
  • Нет аннотаций функций;
  • Нет локальной памяти нитей (thread local storage).

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

[править] Проекты на Go

Несколько интересных проектов, написанных на Go:

Кроме того, Go активно используют Dropbox, Heroku, Github, BBC, Sondcloud.

[править] Реализации

  • gopherjs Github.png — компилятор Go в JavaScript, позволяет исполнять код Go в браузере

[править] Вопросы и ответы

[править] Как удалить определённые символы слева и справа в строке, аналог strip в Python?

   strings.Trim(" Achtung  ", " ")
   

[1]

[править] Как разбить строку на подстроки, аналог split в Python?

   strings.Split(string(content), "\n")
   

[2]

[править] Как проверить строку на соответствие регулярному выражению?

   r, err := regexp.Compile(`\.`)
   if r.MatchString("Short.") == true {
       fmt.Printf("Has a dot.") // <---
   } else {
       fmt.Printf("Has no dot.")
   }

[3] [4]

[править] Как прочитать файл построчно?

Использовать Scanner из bufio:

    file, err := os.Open("/path/to/file.csv")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

[5]


[править] Как пройтись по массиву и выполнить какое-то действие с каждым его элементом?

   var total float64 = 0
   for i, value := range x {
     total += value
   }

[6] [7] [8]

[править] Как прочитать файл?

    func check(e error) {
        if e != nil {
            panic(e)
        }
    }
     

    func main() {

        dat, err := ioutil.ReadFile("/tmp/dat")
        check(err)
        fmt.Print(string(dat))

    }

[9]

[править] Что можно делать со слайсами?

В принципе, плюс-минус то же, что в Python со списками.

Подробнее: SliceTricks Github.png.

[править] Дополнительная информация

  • Tour of Go (англ.) — интерактивный учебник-введение в Go, может использоваться как прекрасный способ погрузиться в язык

Критика Go:

Источник — «http://xgu.ru/wiki/Go»
На других языках