Инструменты Go
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Go
Новая книга:
Обратите внимание на легендарного автора: Брайн Керниган - один из начальных идеологов разработки языка Go на заказ Google.Алан А.А. Донован, Брайн Керниган
Язык программирования Go
ISBN: 978-5-8459-2051-5
432 страницы
апрель 2016
Изд-во Вильямс
Серия: Программирование для профессионалов
Тираж: 700 экземпляров
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Инструменты Go
Свободно скачать эту книжку можно (пока можно?) как написано здесь: GoOlej писал(а):Обратите внимание на легендарного автора: Брайн Керниган - один из начальных идеологов разработки языка Go на заказ Google.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Go
(с) Марк СаммерфильдGo – один из самых удивительных языков, появившихся в последние 15 лет, и первый, нацеленный на программистов и компьютеры XXI века.
Начинаю (в силу определённых обстоятельств) новый виток углубления в Go... и проверки что там сейчас и поменялось за 2 года.
Базовым материалом, на этот раз, будет вот та книжка Кэрнигана, показанная выше.
Всё, что покажется интересным, буду отражать здесь (всё, что не отображено в книжке, или отличается ... хотя бы в силу того, что у нас Linux).
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Go
Свежий дистрибутив: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
Код: Выделить всё
[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@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
А вообще, нужно проследить чтобы версия была 1.5 (или больше).Одно из наибольших новинок в Go 1.1 стал новый диспетчер, спроектированный Дмитрием Вьюковым. Новый планировщик дал настолько разительное увеличение производительности для параллельных программ без изменений кода, что я решил написать что-нибудь об этом.
...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Go
Код: Выделить всё
[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
Код: Выделить всё
[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, 世界
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Go
Вот интересный пример из числа самых первых: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
Это на процессоре (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
Это всё важно позже при тестировании 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"
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Go
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
Но вовсе не хорошо для 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.
Пока я не стал устанавливать gcc-go на этот компьютер, чтобы он (по путям и умолчаниям) не смазывал, поначалу, картину с Golang.
На других компьютеров у меня стоит gcc-go (где-то я даже начинал инсталляцию именно с этого - он сам по себе самодостаточный и компилятор Go поставит по зависимостям).
При такой компиляции GCC использует динамическую сборку, и размер исполнимых файлов под Linux может быть в разы меньше.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей