Чем кто из них лучше-хуже - это любопытный вопрос ... но на будущее.
Есть ещё много мелких интересных деталей относительно 2-х реализаций.
Во всех предыдущих версиях Go (<=1.4) обе эти реализации можно было установить (из стандартных репозитариев!) параллельно и выполнять тот или другой по необходимости, сравнивать...
Но вот устанавливал я Go в Fedora 23 (RFR):
Код: Выделить всё
[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
...
Установлено:
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 GoBook]$ go build gopl.io/ch1/helloworld
[olej@dell GoBook]$ ./helloworld
Hello, 世界
Всё путём!
Но если теперь доустановить Go из проекта GCC:
Код: Выделить всё
[olej@dell GoBook]$ sudo dnf install gcc-go
...
Установлено:
gcc-go.x86_64 5.3.1-6.fc23 libgo.x86_64 5.3.1-6.fc23 libgo-devel.x86_64 5.3.1-6.fc23
[olej@dell GoBook]$ gccgo --version
gccgo (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
Copyright (C) 2015 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая
коммерческую ценность и применимость для каких-либо целей.
Всё ОК!
Код: Выделить всё
[olej@dell tasks]$ go build -compiler gccgo hello.go
# command-line-arguments
ar: `u' modifier ignored since `D' is the default (see `U')
[olej@dell tasks]$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=24bd1519714ce69e26d279a1bbf35ddcf2de8021, not stripped
[olej@dell tasks]$ ./hello
Hello, 世界
Но!!!
При этом нарушается работоспособность ранее установленного пакета GoLang:
Код: Выделить всё
[olej@dell tasks]$ go build -compiler gc hello.go
hello.go:10:8: cannot find package "fmt" in any of:
/usr/src/fmt (from $GOROOT)
/home/olej/2016_WORK/GoBook/src/fmt (from $GOPATH)
package runtime: cannot find package "runtime" in any of:
/usr/src/runtime (from $GOROOT)
/home/olej/2016_WORK/GoBook/src/runtime (from $GOPATH)
В нескольких предыдущих версиях Go и дистрибутивах Linux такого не наблюдалось.
Что это?