Slice Tricks: https://code.google.com/p/go-wiki/wiki/SliceTricks
Useful packages:
Debug for human: https://github.com/davecgh/go-spew
Structured, pluggable logging https://github.com/Sirupsen/logrus
Traceback: | |
File "/Users/m0sth8/develop/venv/tulula/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response | |
114. response = wrapped_callback(request, *callback_args, **callback_kwargs) | |
File "/Users/m0sth8/develop/venv/tulula/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper | |
430. return self.admin_site.admin_view(view)(*args, **kwargs) | |
File "/Users/m0sth8/develop/venv/tulula/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view | |
99. response = view_func(request, *args, **kwargs) | |
File "/Users/m0sth8/develop/venv/tulula/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func | |
52. response = view_func(request, *args, **kwargs) | |
File "/Users/m0sth8/develop/venv/tulula/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner |
... | |
type MyArray [3]string | |
type MyArray2 MyArray | |
func HandleMyArray(a MyArray) { | |
} | |
... |
public static Double getNumericValueFromLiteralExpr(GoExpr expr) { | |
if (expr instanceof GoLiteralExpression){ | |
GoLiteral literal = ((GoLiteralExpression) expr).getLiteral(); | |
if (literal instanceof GoLiteralIdentifier){ | |
if (((GoLiteralIdentifier) literal).isIota()){ | |
Integer iotaValue = ((GoLiteralIdentifier) literal).getIotaValue(); | |
if (iotaValue != null) | |
return iotaValue.doubleValue(); | |
} else { |
// Example | |
package main; | |
import ( | |
"jsonhelper" | |
"fmt" | |
) | |
func main(){ | |
jsonValue := []interface {}{ |
В этой статье, я хотел бы рассказать вам, как можно достаточно быстро и легко написать небольшое веб-приложение на языке Go, который, не смотря на юный возраст, успел завоевать расположение у многих разработчиков. Обычно, для подобных статей пишут искусственные приложения, вроде TODO листа. Мы же попробуем написать что-то полезное, что уже существует и используется. | |
Часто, при разработке сервисов, нужно понимать какие данные отправляются в другой сервис, а возможность перехватить траффик есть не всегда. И как раз для того, чтобы отлавливать подобные запросы, существует проект http://requestb.in/, позволяющий собирать запросы по определённому урлу и отображать их в веб-интерфейсе. Написанием подобного же приложения мы и займёмся. Чтобы немного упростить себе задачу, возьмём за основу какой-нибудь фреймворк, например <a href="http://martini.codegangsta.io/">Martini</a>. | |
В конечном итоге, у нас должен будет получится вот такой вот сервис: | |
<img align="left" src="http://habrastorage.org/getpro/habr/post_images |
Продолжение статьи о том, как написать небольшое полнофункциональное приложение на Go. | |
В <a href="http://habrahabr.ru/post/208680/">первой части</a> мы реализовали REST API и научились собирать приходящие HTTP запросы. В этой части, мы покроем наше приложение тестами, добавим красивый веб-интерфейс на основе AngularJS и Bootstrap, и внедрим ограничение доступа для разных пользователей. | |
<habracut text="Напишем капельку кода на Go" /> | |
В этой части нас ждут следующие этапы: | |
<ol> | |
<li>Шаг четвёртый. А как же тесты?</li> | |
<li>Шаг пятый— украшательства и веб-интерфейс;</li> | |
<li>Шаг шестой. Добавляем немного приватности.</li> |
Slice Tricks: https://code.google.com/p/go-wiki/wiki/SliceTricks
Useful packages:
Debug for human: https://github.com/davecgh/go-spew
Structured, pluggable logging https://github.com/Sirupsen/logrus
package main | |
import ( | |
"net/http" | |
"github.com/cocaine/cocaine-framework-go/cocaine" | |
) | |
func handler(w http.ResponseWriter, req *http.Request) { | |
w.Header().Set("Content-Type", "text/plain") | |
w.Write([]byte("Pong")) |
package main | |
import ( | |
"encoding/json" | |
"fmt" | |
"net/http" | |
) | |
type Response struct { | |
Args map[string]string `json:"args"` |
// POST /api/tasks/ - create Scanning task and return task data | |
{ | |
"type": "docker" // | |
"options": { // common options for task | |
"timeout": 0 // task timeout, 0 - with no timeout | |
"proxy": "", // proxy settings | |
}, | |
"docker": { // configuration for docker task type | |
"image": "barbudo/wappalyzer", | |
"args": ["http://domain.com"], // arguments pushed to running container |