Инструменты Go

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 19 окт 2015, 14:40

Вот такое регулярно обновляемый дайджест (статьи, новинки, видео, интервью, лекции) о Go - "Русскоязычный подкаст о Go":
Изображение

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 22 окт 2015, 11:52

Книга по Go, перевод, Библиотека программиста, Марк Саммерфильд "Программирование на языке Go. Разработка приложений XXI века" (2013, PDF), 582 стр.
Изображение
P.S. Можете скачивать пока она там лежит ;-)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 26 апр 2016, 20:51

Новая книга:
Изображение
Алан А.А. Донован, Брайн Керниган
Язык программирования Go
ISBN: 978-5-8459-2051-5
432 страницы
апрель 2016
Изд-во Вильямс
Серия: Программирование для профессионалов
Тираж: 700 экземпляров
Обратите внимание на легендарного автора: Брайн Керниган - один из начальных идеологов разработки языка Go на заказ Google.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Инструменты Go

Непрочитанное сообщение Olej » 23 май 2016, 15:28

Olej писал(а):Обратите внимание на легендарного автора: Брайн Керниган - один из начальных идеологов разработки языка Go на заказ Google.
Свободно скачать эту книжку можно (пока можно?) как написано здесь: Go

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 24 май 2016, 12:28

Go – один из самых удивительных языков, появившихся в последние 15 лет, и первый, нацеленный на программистов и компьютеры XXI века.
(с) Марк Саммерфильд

Начинаю (в силу определённых обстоятельств) новый виток углубления в Go... и проверки что там сейчас и поменялось за 2 года.
Базовым материалом, на этот раз, будет вот та книжка Кэрнигана, показанная выше.
Всё, что покажется интересным, буду отражать здесь (всё, что не отображено в книжке, или отличается ... хотя бы в силу того, что у нас Linux).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 24 май 2016, 12:42

Olej писал(а): Всё, что покажется интересным, буду отражать здесь (всё, что не отображено в книжке, или отличается ... хотя бы в силу того, что у нас Linux).
Свежий дистрибутив:

Код: Выделить всё

[olej@dell ~]$ lsb_release -ircd
Distributor ID:	Fedora
Description:	Fedora release 23 (Twenty Three)
Release:	23
Codename:	TwentyThree
[olej@dell ~]$ uname -a
Linux dell.localdomain 4.4.9-300.fc23.x86_64 #1 SMP Wed May 4 23:56:27 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Пакеты Go в стандартном репозитарии (и это ещё не всё, см. далее):

Код: Выделить всё

[olej@localhost ~]$ dnf list golang*
Последняя проверка окончания срока действия метаданных: 20 days, 1:20:33 назад, Sun May  1 15:47:26 2016.
Доступные пакеты
golang.x86_64                                                                       1.5.3-1.fc23                               upd
golang-bin.x86_64                                                                   1.5.3-1.fc23                               upd
...

Код: Выделить всё

[olej@dell ~]$ dnf list golang* | wc -l
569
[olej@dell ~]$ dnf list golang-github-* | wc -l
478
[olej@dell ~]$ dnf list golang-google* | wc -l
47

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 24 май 2016, 13:44

Код: Выделить всё

[olej@localhost ~]$ dnf info golang
Последняя проверка окончания срока действия метаданных: 20 days, 1:25:06 назад, Sun May  1 15:47:26 2016.
Доступные пакеты
Имя         : golang
Архитектура : x86_64
Эпоха       : 0
Версия      : 1.5.3
Релиз       : 1.fc23
Размер      : 1.2 M
Репозиторий : updates
Краткое опи : The Go Programming Language
URL         : http://golang.org/
Лицензия    : BSD and Public Domain
Описание    : The Go Programming Language.

Код: Выделить всё

[olej@localhost ~]$ sudo dnf install golang
[sudo] пароль для olej:.
Последняя проверка окончания срока действия метаданных: 2:11:50 назад, Sat May 21 15:02:22 2016.
Зависимости разрешены.
==================================================================================================================================
 Package                             Архитектура                 Версия                            Репозиторий                  Ра
==================================================================================================================================
Установка:
 go-srpm-macros                      noarch                      2-3.fc23                          fedora                       8.
 golang                              x86_64                      1.5.4-1.fc23                      updates                      1.
 golang-bin                          x86_64                      1.5.4-1.fc23                      updates                       4
 golang-src                          noarch                      1.5.4-1.fc23                      updates                      3.

Результат операции
==================================================================================================================================
Установка  4 Пакеты

Объем загрузки: 45 M
Объем изменений: 235 M
Продолжить? [д/Н]: y
...
Установлено:
  go-srpm-macros.noarch 2-3.fc23      golang.x86_64 1.5.4-1.fc23      golang-bin.x86_64 1.5.4-1.fc23      golang-src.noarch 1.5.4-1.fc23.....

Выполнено!

Код: Выделить всё

[olej@dell ~]$ go version
go version go1.5.4 linux/amd64
Диспетчер Go
Одно из наибольших новинок в Go 1.1 стал новый диспетчер, спроектированный Дмитрием Вьюковым. Новый планировщик дал настолько разительное увеличение производительности для параллельных программ без изменений кода, что я решил написать что-нибудь об этом.
...
Изображение
А вообще, нужно проследить чтобы версия была 1.5 (или больше).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 24 май 2016, 14:04

Код: Выделить всё

[olej@localhost GoBook]$ pwd
/home/olej/2016_WORK/GoBook

[olej@localhost GoBook]$ ls -l
итого 0

[olej@localhost ~]$ go get gopl.io/ch1/helloworld
package gopl.io/ch1/helloworld: cannot download, $GOPATH not set. For more details see: go help gopath

Код: Выделить всё

[olej@localhost ~]$ tail -n3 $HOME/.bashrc.
export GOPATH=$HOME/2016_WORK/GoBook
В новом окне терминала:

Код: Выделить всё

[olej@localhost ~]$ echo $GOPATH
/home/olej/2016_WORK/GoBook

[olej@localhost ~]$ go get gopl.io/ch1/helloworld
go: missing Git command. See https://golang.org/s/gogetcmd
package gopl.io/ch1/helloworld: exec: "git": executable file not found in $PATH
ОК, но дистрибутив свежий, только установленный, для Go нужен ещё GIT, обязательно:

Код: Выделить всё

[olej@localhost ~]$ dnf list git
Последняя проверка окончания срока действия метаданных: 20 days, 1:43:57 назад, Sun May  1 15:47:26 2016.
Доступные пакеты
git.x86_64                                                         2.5.5-1.fc23                                                          upda

[olej@localhost ~]$ sudo dnf install git
...
Установлено:
  git.x86_64 2.5.5-1.fc23        git-core.x86_64 2.5.5-1.fc23          git-core-doc.x86_64 2.5.5-1.fc23   perl-Error.noarch 1:0.17024-4.fc23.
  perl-Git.noarch 2.5.5-1.fc23   perl-TermReadKey.x86_64 2.33-3.fc23..

Выполнено!

Код: Выделить всё

[olej@localhost ~]$ go get gopl.io/ch1/helloworld

[olej@localhost ~]$ ls -l $GOPATH/bin
итого 2312
-rwxr-xr-x. 1 olej olej 2367416 май 21 17:34 helloworld

[olej@localhost ~]$ $GOPATH/bin/helloworld.
Hello, 世界
Вот теперь проверку что всё, необходимое для работы Go (Golang), можно считать успешно установленным.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 24 май 2016, 14:44

Olej писал(а): Базовым материалом, на этот раз, будет вот та книжка Кэрнигана, показанная выше.
Вот интересный пример из числа самых первых:

Код: Выделить всё

// Server1 is a minimal "echo" server.
package main

import (
        "fmt"
        "log"
        "net/http"
)

func main() {
        http.HandleFunc("/", handler) // each request calls handler
        log.Fatal(http.ListenAndServe("localhost:8000", nil))
}

// handler echoes the Path component of the requested URL.
func handler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path)
}

Код: Выделить всё

[olej@dell bin]$ go build gopl.io/ch1/server1

[olej@dell bin]$ ./server1 &
[1] 7561

[olej@dell 23]$ ps H -a | grep server
 7561 pts/6    Sl     0:00 ./server1
 7561 pts/6    Sl     0:00 ./server1
 7561 pts/6    Sl     0:00 ./server1
 7561 pts/6    Sl     0:00 ./server1
 7586 pts/4    S+     0:00 grep --color=auto server
Сервер (последовательное приложение Go) работает в 4 потока Linux.
Это на процессоре (i7):

Код: Выделить всё

[olej@dell 20]$ cat /proc/cpuinfo | grep processor
processor	: 0
processor	: 1
processor	: 2
processor	: 3
processor	: 4
processor	: 5
processor	: 6
processor	: 7
(ядер там 4, но + и гипертриэдинг 4 х 2 = 8)
Это всё важно позже при тестировании Go-сопрограмм.

Там же из примеров собираем и HTTP-клиент:

Код: Выделить всё

[olej@dell bin]$ go build gopl.io/ch1/fetch
[olej@dell bin]$ ./fetch http://localhost:8000
URL.Path = "/"
[olej@dell bin]$ ./fetch http://localhost:8000/xxx
URL.Path = "/xxx"
[olej@dell bin]$ ./fetch http://localhost:8000/zzz
URL.Path = "/zzz"
И подключение к этому же HTTP-серверу со стороны любого стандартного браузера (здесь это Яндекс-браузер ... оказался под рукой ;-) )
Вложения
server1-1.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go

Непрочитанное сообщение Olej » 24 май 2016, 15:05

Olej писал(а):Вот теперь проверку что всё, необходимое для работы Go (Golang), можно считать успешно установленным.
Olej писал(а):Базовым материалом, на этот раз, будет вот та книжка Кэрнигана, показанная выше.
Сразу зафиксируем то, что ни в одной книжке, как правило, вам не расскажут:

1. Показанные выше компиляции собирают приложения со статической сборкой с библиотеками.

Код: Выделить всё

[olej@dell bin]$ ls -l helloworld 
-rwxr-xr-x. 1 olej olej 2367440 май 23 20:35 helloworld

[olej@dell bin]$ ldd helloworld 
	не является динамическим исполняемым файлом

[olej@dell bin]$ file helloworld 
helloworld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
Это хорошо, возможно, для embedded систем/приложений, или Windows.
Но вовсе не хорошо для Linux (см. размер исполнимого файла)

2. При некоторых условиях (опциями команд) сборка может быть динамическая, с использованием shared библиотек операционной системы:

Код: Выделить всё

 
[olej@dell bin]$ ldd fetch 
	linux-vdso.so.1 (0x00007ffd1c5e5000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5a94e62000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f5a94aa1000)
	/lib64/ld-linux-x86-64.so.2 (0x00005587fc664000)
С этими опциями я разберусь попозже.

3. Всё это относится к основному проекту Golang.
Но в проекте компилятора GCC (который поддерживает и так несколько языков программирования) развивается ветка Go:

Код: Выделить всё

[olej@localhost ~]$ dnf list gcc* | grep go
gcc-go.x86_64                                  5.3.1-6.fc23             updates

[olej@localhost ~]$ dnf info gcc-go
Последняя проверка окончания срока действия метаданных: 20 days, 1:23:24 назад, Sun May  1 15:47:26 2016.
Доступные пакеты
Имя         : gcc-go
Архитектура : x86_64
Эпоха       : 0
Версия      : 5.3.1
Релиз       : 6.fc23
Размер      : 8.9 M
Репозиторий : updates
Краткое опи : Go support
URL         : http://gcc.gnu.org
Лицензия    : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Описание    : The gcc-go package provides support for compiling Go programs
            : with the GNU Compiler Collection.
Где-то встречалось, что это тот же код компиляции Golang, имплементированный в GCC (все проекты - открытые), т.е. разговор в терминах "лучше-хуже", пожалуй, вряд ли уместен.
Пока я не стал устанавливать gcc-go на этот компьютер, чтобы он (по путям и умолчаниям) не смазывал, поначалу, картину с Golang.
На других компьютеров у меня стоит gcc-go (где-то я даже начинал инсталляцию именно с этого - он сам по себе самодостаточный и компилятор Go поставит по зависимостям).
При такой компиляции GCC использует динамическую сборку, и размер исполнимых файлов под Linux может быть в разы меньше.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя