Автор Тема: Язык программирования Go  (Прочитано 20122 раз)

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Язык программирования Go
« : Апрель 08, 2012, 12:28:57 pm »
Кстати, я тут на Go немного полезного для проекта пописал. Вполне себе язычок. Умеренно годный. Но из за отсутствия "обобщенки" там приходится делать в рантайме (посредством доступа к "метаинформации") то, что можно было бы сделать на этапе компиляции. Причем это на каждом шагу (по крайней мере в той области где я сейчас этот Go применяю). Поэтому ощущения от языка весьма похожи на ощущение от языка с динамической типизацией, хотя конечно все равно много лучше чем ощущения от того же питона например.
Кстати, я тут на Go немного полезного для проекта пописал.
На днях вышла 1 версия Go.
Какие еще впечатления от языка? Годится ли он как замена пхп, питона для написания, скажем, движка динамического сайта?
Я не великий знаток php/python и прочей ереси, опыта в использовании их у меня ну очень мало. Но использую сейчас Go как раз для сайта с ну о-очень динамическим контентом. С реалтаймовым контентом, я бы сказал. :-) И да, Go как раз версии 1.
Я не великий знаток php/python и прочей ереси, опыта в использовании их у меня ну очень мало. Но использую сейчас Go как раз для сайта с ну о-очень динамическим контентом. С реалтаймовым контентом, я бы сказал. :-) И да, Go как раз версии 1.
Под Apache/ngnix или все самописное?
Это в этом проекте отсутствие обобщенки напрягает?
Используются стандартные либы Go. В том числе template/text и template/html. Ну, то есть они вне зависимости от сетевой части использовались бы (апач там или нет). Также используется модуль json. И там и там активно используется рефлекшн. То что могло бы делаться на этапе компиляции, делается в рантайме, со всеми растекающимися последствиями.

Да, а все крутится на google app engine.
Да, а все крутится на google app engine.
Жаль, хотелось бы узнать про опыт написания полноценного независимого приложения.
Полноценное независимое приложение пишется в точности так же. То есть мне код менять не придется (кроме гуглоспецифичных вещей вроде гугловой авторизации). И там и там используется стандартный пакет http.

Грубо говоря, код hello world'a на gae и standalone http server будет один и тот же.

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #1 : Апрель 08, 2012, 12:29:36 pm »
Впрочем, лучше один раз увидеть, чем много раз услышать.

Вот hello world писаный на Go и хостящийся на Google App Engine:
package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}

А вот полный исходник hello world'a на Go без всякого Google App Engine, компилящийся в отдельный исполняемый файл и работающий в режиме "сам себе веб-сервер":
package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil) // < отличие тут
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}

func main() { // < и тут
    init()
}

Как видим, отличие только в точке входа (вместо init точкой входа является main) и собственно явным запуском главного цикла.

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #2 : Апрель 08, 2012, 03:01:23 pm »
"...Проще говоря, для сохранении равной скорости ответа при «тяжёлой бомбардировке» запросами, реализация на Go требует в 4 раза меньше железа чем Java. И почти в 20 раз меньше «любимого всеми» PHP. Фактически, реальная производительность (учитывая бутылочные горлышки, от которых никуда не деться) приближается к реализации на C/C++."

"...примерно для 7 задач из 10 — Go-фронтенд (включающий в себя и само приложение) справляется с HiLoad успешнее чем Nginx."
Интересно каких?

"...Go изначально неплохо ориентирован на web. Вот, например, два хорошо себя зарекомендовавших фреймворка:
github.com/garyburd/twister (вдохновлённый Tornado/Python)
github.com/hoisie/web.go (вдохновлённый Webpy/Python)
Есть замечательные либы для MongoDB, CouchDB, Redis, Cassandra, SQLite, Mysql. Отличные движки темплетов (помимо встроенного)."

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #3 : Апрель 08, 2012, 03:26:57 pm »
Никто не пробовал установить под винду и подключить гуглевый компилятор? http://code.google.com/p/golangide/

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #4 : Апрель 08, 2012, 03:36:26 pm »
Никто не пробовал установить под винду и подключить гуглевый компилятор? http://code.google.com/p/golangide/
К сожалению подвиндой не занимаюсь. Так что я пас.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Язык программирования Go
« Ответ #5 : Апрель 08, 2012, 05:06:01 pm »
Без особых проблем= а в чем дело?

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #6 : Апрель 08, 2012, 05:58:53 pm »
Без особых проблем= а в чем дело?
Скачал компилятор и IDE 32bit:
http://code.google.com/p/go/downloads/list?q=OpSys-Windows+Type%3DInstaller
http://code.google.com/p/golangide/downloads/list
настроил, наподобии, как тут сказано:
http://code.google.com/p/golangide/downloads/list
Configure Environment
Menu: View -> Options -> LiteEnv or Welcome: Options -> LiteEnv
Double clicked .env file to editor
Example win32.env
PATH=c:/go/bin;%PATH%
GOROOT=c:/go
GOBIN=c:/go/bin
GOARCH=386
GOOS=windows
в результате, ничего не компилируется, хотя с коммандной строки компилятора все ок.

DIzer

  • Гость
Re: Язык программирования Go
« Ответ #7 : Апрель 08, 2012, 06:08:33 pm »
Какой вид проекта создавали go1 или е64? если go1 то вы должны  добавить директорию где хранятся файлы проекта в GOPATH (через диалог) и установить ее активной через двойной щелчок в  окне Projects (либо через контекстное меню в этом окне), рекомендую создавать е64  -проект (если пути корректны то должен построиться и запуститься без установки GOPATH)

DIzer

  • Гость
Re: Язык программирования Go
« Ответ #8 : Апрель 08, 2012, 06:11:16 pm »
А вообще утырков локализаторов - отправить бы в Казань на пост "Дальний"...

DIzer

  • Гость
Re: Язык программирования Go
« Ответ #9 : Апрель 08, 2012, 06:31:17 pm »
Вот адрес утырка lockalsash@gmail.com-ведь не постеснялся же его оставить  >:(

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #10 : Апрель 08, 2012, 07:37:25 pm »
Пасиб, заработало. Как е64 сразу, варианты go1 или просто файл - с бубном.
Жаль нет кросскомпиляции.

DIzer

  • Гость
Re: Язык программирования Go
« Ответ #11 : Апрель 08, 2012, 07:43:51 pm »
Это не танцы с бубном- это проект рассчитанный на использование в веб - никаких дополнительных файлов не создается -просто конфигурируются пути (например на папки лежащие в htdoc) - активный проект - содержится в одной из папок и сам компилятор...в ряде случаев крайне удобно...

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #12 : Апрель 08, 2012, 09:10:23 pm »
Проект go1 рассчитан на веб?
просто конфигурируются пути (например на папки лежащие в htdoc) - активный проект - содержится в одной из папок и сам компилятор...в ряде случаев крайне удобно...
так в ГО же статическая компиляция...

DIzer

  • Гость
Re: Язык программирования Go
« Ответ #13 : Апрель 08, 2012, 09:48:37 pm »
Проект go1 рассчитан на веб?
просто конфигурируются пути (например на папки лежащие в htdoc) - активный проект - содержится в одной из папок и сам компилятор...в ряде случаев крайне удобно...
так в ГО же статическая компиляция...
Причем тут компиляция - речь идет об определении структуры проекта  - впрочем , поймете сами...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Язык программирования Go
« Ответ #14 : Апрель 09, 2012, 12:44:08 pm »
Кстати, согласно вот этому: http://habrahabr.ru/post/141722/ в 32битной винде есть проблема.  И в 32битном линуксе тоже (хотя кому он, 32битный, нужен?).

Кратко:
Цитировать
Abtin Forouzandeh обнаружил баг в реализации go для 32-хбитной платформы Windows. Простейшая программа запускается и тут же падает.

По итогам исследования ошибки оказалось, что дело в выделении памяти рантаймом go. В 32-хбитной системе Windows всего доступны 4GB виртуального адресного пространства, верхние 2 из которых зарезервированы для системы, а процессу остаются нижние 2 гигабайта. При запуске программы на go, скомпилированной компилятором 8g рантайм пытается выделить 512 мегабайт виртуального адресного пространства для нужд сборщика мусора. Проблема в том, что память требуется одним куском. Однако в этой реализации языка библиотека KERNELBASE.DLL загружается в середине адресного пространства, выделить протяженный кусок памяти у системы не получается и происходит падение.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"