Framework go: Revel — Go Web Framework
Echo-Framework – вопросы и ответы по программированию
Я пытаюсь протестировать golang API, основанный на echo framework/router. У меня есть следующий тест….. func TestLogout(t *testing.T) { loadConfig() db := stubDBs(t) Convey(«When you post to /log…
1 месяц, 1 неделя назад
Chris L
Я новичок в Go и Echo. Я должен хранить шаблон html (шаблон электронной почты), который также будет содержать некоторые детали, переданные в качестве контекста. Чтобы его можно было сохранить в сто…
1 месяц, 2 недели назад
arundeepak
Я считаю, что этот вопрос почти такой же . Но я использую websocket в Echo framework вместо Gorilla. Поэтому я думаю, что подход будет другим. Эхо дает пример. Но он показывает только, как
11 месяцев, 1 неделя назад
asubanovsky
Ниже приведена точка входа моего веб-приложения, написанная в Go с использованием Labstack Echo: package main import ( «github.com/labstack/echo» mw «github.com/labstack/echo/middleware» ) func mai…
4 года, 11 месяцев назад
j3d
Я пытаюсь обслуживать несколько файлов с помощью Echo, но он не работает каждый раз. Код api выглядит так: package main import ( «github.com/labstack/echo» «net/http» ) func main() { e := echo.New(…
вот мой тест с использованием пакета тестирования и веб-структуры echo web http: (переменная webserver является глобальным экземпляром эха) func TestRunFunction(t *testing.T){ req := new(http.Reque…
4 года, 1 месяц назад
Chenko47
Поэтому я пытаюсь поместить изображение из base64, но я получаю ZgotmplZ. Я пытаюсь использовать template.URL(s) следующим образом: e := echo.New() funcMap := template.FuncMap{ «safe»: func(s strin. ..
3 года, 2 месяца назад
dekros
Я построил эхо-микросервис api, с двумя маршрутизациями: post и get. Метод get работает отлично, но метод get не может разобрать JSON, то есть структура пуста после функции Bind(). Должно быть, это…
Я создаю веб-гусеничную машину. Я передаю URL-адрес с помощью функции искателя и разбора его, чтобы получить все ссылки в теге привязки, затем я вызываю ту же функцию искателя для всех этих URL-адр…
3 года, 6 месяцев назад
k3rn3l
Я использую Echo Framework. Как я могу изменить этот формат ответа на свой собственный формат его ошибка из библиотеки JWT https://github.com/dgrijalva/jwt-go { «message»: «invalid or expired jwt» …
Я использую Echo для создания минималистского сервера в Голанге. In, Echo можно связать входящую полезную нагрузку запроса JSON с внутренней стру
Я новичок в Go и пытаюсь проверить аргумент метода. У меня есть следующий код func (c *controller) OrderNew(ctx echo.Context) error { Когда я пытаюсь либо: fmt.println(ctx) fmt.Printf(«%v \n», ctx)…
мой вопрос, как связать (автоматическое связывание?) пользовательский тип структуры в объекте карты (переменная)? это мой собственный тип структуры type Tetris struct { . .. … NowBlock map[string]…
2 года, 3 месяца назад
gdk
Я работаю с echo framework и «github.com/foolin/echo-template». Существует меню: <ul> <li class=»m-menu__item m-menu__item—submenu m-menu__…
Go Revel framework с не-localhost, живым сайтом
Я пытаюсь использовать Go и фреймворк Revel для запуска простого приложения на моем Живом, личном-website.com.
Все в порядке, когда я разрабатываю локально и тестирую localhost:8888. Однако после установки на мой веб-сервер и запуска моего приложения из root, # run revel personalwebsiteapp
я получаю следующую ошибку:
ERROR 2013/10/01 04:01:35 harness. go:167: Failed to start reverse proxy: listen tcp xx.xxx.xx.xx:80: cannot assign requested address
В полной растерянности здесь. Нужно ли мне запускать прокси-сервер типа Nginx или что-то еще поверх Revel?
Вот что может быть релевантной частью моего файла conf/app.conf:
http.addr="personal-website.com"
http.port=80 #whether I set this to 80 or 8888 doesn't matter, I get the same error
http
nginx
go
port
revel
Поделиться
Источник
tim peterson
01 октября 2013 в 04:12
2 ответа
- зачем упиваться веб-фреймворк учебник приложение не работает
Я новичок в Go и хочу использовать веб-фреймворк revel для разработки веб-приложений. Я последовал за учебник, чтобы установить и протестировать упиваться от: http:/ / revel.github.io / учебник / индекс. html Но когда я запускаю команду revel run myapp и go to http://localhost:9000/ , на странице. ..
- Не удается установить Revel с go get
Мой go env : GOARCH=amd64 GOBIN= GOCHAR=6 GOEXE= GOHOSTARCH=amd64 GOHOSTOS=darwin GOOS=darwin GOPATH=/Users/xamenrax/code/golang GORACE= GOROOT=/usr/local/Cellar/go/1.3.2/libexec GOTOOLDIR=/usr/local/Cellar/go/1.3.2/libexec/pkg/tool/darwin_amd64 CC=clang GOGCCFLAGS=-fPIC -m64 -pthread…
7
Я сам могу ответить на свой вопрос. В итоге я перенаправил свое приложение Revel на Nginx b/c, но так и не смог получить предложение @Intermernet’s об использовании sudo revel run
для работы.
Ниже приведены ключевые детали из файлов nginx.conf и Revel app.conf,чтобы сделать эту работу.
nginx.conf
server {
listen 80;
# listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html; # not relevant, but gives error if root isn't set to something
index index. html index.htm; # not relevant
# Make site accessible from http://localhost/
# server_name localhost;
server_name my-personal-website.com;
location / {
proxy_pass http://127.0.0.1:9000;
}
}
}
Go Ревель personalwebsiteapp app.conf
http.addr="127.0.0.1"
http.port=9000
После этого просто запустите Nginx, запустите приложение revel и viola!, http://my-personal-website.com теперь в прямом эфире.
Поделиться
tim peterson
03 октября 2013 в 13:47
1
Вероятно, вам нужно работать от имени root (используйте sudo
) для прослушивания порта 80, так как это привилегированный порт .
sudo run revel personalwebsiteapp
Для порта 8888 вам может потребоваться изменить правила SELinux.
Что-то вроде:
semanage port -a -t http_port_t -p tcp 8888
Поделиться
Intermernet
01 октября 2013 в 05:28
Похожие вопросы:
Revel framework и завершение кода Go
есть возможность использовать Revel framework с поддержкой завершения кода Go. Насколько я знаю, утилита gocode требует, чтобы код был скомпилирован в библиотеку в подпапку pkg , чтобы…
Ошибки развертывания приложения Go Revel на Heroku с помощью buildpack
Я пытаюсь использовать Go и упиваться Heroku, используя этот buildpack https://github.com/robfig/heroku-buildpack-go-revel , но это, похоже, не работает: Я получаю сообщение об ошибке при попытке…
Go Revel framework порт 9000 уже используется
Я хорошо следую вместе с фреймворком Go Revel , пока не запустил тестовое приложение go: $ revel run myapp что дает мне весь правильный вывод, но также дает следующую ошибку : ERROR 2013/09/30. ..
зачем упиваться веб-фреймворк учебник приложение не работает
Я новичок в Go и хочу использовать веб-фреймворк revel для разработки веб-приложений. Я последовал за учебник, чтобы установить и протестировать упиваться от: http:/ / revel.github.io / учебник /…
Не удается установить Revel с go get
Мой go env : GOARCH=amd64 GOBIN= GOCHAR=6 GOEXE= GOHOSTARCH=amd64 GOHOSTOS=darwin GOOS=darwin GOPATH=/Users/xamenrax/code/golang GORACE= GOROOT=/usr/local/Cellar/go/1.3.2/libexec…
Внешняя конфигурация рядом с переменными app.conf и среды для Revel go framework
Я читал, ревел app.conf руководство по конфигурации и переменных окружения. однако я не смог найти способ использовать дополнительную внешнюю конфигурацию вместе с app.conf. Моя цель-получить…
Как развернуть Revel framework (Go lang) с помощью nginx
Мне нравится спрашивать, как я могу развернуть свое приложение revel framework с помощью nginx в другом порту linten, например в порту 8089. Спасибо
Revel Framework — Go Lang — не удалось найти контроллер
Я использую Revel framework для golang. У меня есть подкаталог в папке контроллеров, как показано ниже controllers new app2.go app1.go Содержание app1.go package controllers import (…
Возможно ли для отладки рамках go упиваться от Visual Studio Code?
Я пытаюсь отладить приложение revel с помощью visual studio, но не могу заставить его работать. Я видел этот вопрос, как отлаживать приложение revel framework (golang) в visual studio code(vscode) ,…
Не удается установить revel framework form Go
Я попытался установить Revel Framework . Я следовал всем шагам, как указано в документации, но всякий раз, когда я пытался запустить команду Revel, она выдает паническую ошибку. Ниже приведены шаги,…
Шаблоны в Gin Web Framework (Golang)
На прошлой неделе я занимался разработкой небольшого веб-приложения на Go с фреймворком Gin и у меня заняло порядочно времени на то, чтобы разобраться с языком шаблонов, используемых в нём. В этой небольшой заметке я разберу несколько примеров работы с шаблонами в Go, которые должны помочь вам в их понимании.
Перед тем, как начать, приведу настройки моего GOPATH:
$ echo $GOPATH
/Users/markneedham/projects/gocode
Проект с этими примерами располагается в папке src:
$ pwd
/Users/markneedham/projects/gocode/src/github.com/mneedham/golang-gin-templating-demo
Вначале установим Gin:
$ go get gopkg.in/gin-gonic/gin.v1
Он установится сюда:
$ ls -lh $GOPATH/src/gopkg.in
total 0
drwxr-xr-x 3 markneedham staff 102B 23 Dec 10:55 gin-gonic
Теперь создадим главную функцию для запуска нашего веб-приложения.
demo.go:package main
import (
«github.com/gin-gonic/gin»
«net/http»
)
func main() {
router := gin.Default()
router.LoadHTMLGlob(«templates/*»)
// our handlers will go here
router.Run(«0. 0.0.0:9090″)
}
Мы запустили приложение на порту 9090, а шаблоны приложения располагаются в папке templates, которая находится там же:
$ ls -lh
total 8
-rw-r--r-- 1 markneedham staff 570B 23 Dec 13:34 demo.go
drwxr-xr-x 4 markneedham staff 136B 23 Dec 13:34 templates
Массивы
Создадим роут, выводящий значения неупорядоченного массива:
router.GET("/array", func(c *gin.Context) {
var values []int
for i := 0; i
- {{ range .values }}
- {{ . }}
{{ end }}
Запросим с cURL ответ от приложения и должны увидеть следующее:
$ curl http://localhost:9090/array
А что если нам нужно вывести массив структур:
import "strconv"
type Foo struct {
value1 int
value2 string
}
router.GET(«/arrayStruct», func(c *gin.Context) {
var values []Foo
for i := 0; i
- {{ range . values }}
- {{ .Value1 }} -> {{ .Value2 }}
{{ end }}
Запросим ответ с cURL:
$ curl http://localhost:9090/arrayStruct
- 0 -> value 0
- 1 -> value 1
- 2 -> value 2
- 3 -> value 3
- 4 -> value 4
Карты
Сделаем то же самое с картами:
router.GET("/map", func(c *gin.Context) {
values := make(map[string]string)
values["language"] = "Go"
values["version"] = "1.7.4"
c.HTML(http.StatusOK, «map.tmpl», gin.H{«myMap»: values})
})
- {{ range .myMap }}
- {{ . }}
{{ end }}
заcURL-им:
$ curl http://localhost:9090/map
А что если нам нужно увидеть ключи?
router.GET("/mapKeys", func(c *gin.Context) {
values := make(map[string]string)
values["language"] = "Go"
values["version"] = "1.7.4"
c.HTML(http.StatusOK, «mapKeys. tmpl», gin.H{«myMap»: values})
})
- {{ range $key, $value := .myMap }}
- {{ $key }} -> {{ $value }}
{{ end }}
$ curl http://localhost:9090/mapKeys
- language -> Go
- version -> 1.7.4
И, наконец, что если нам нужно выбрать определённые значения из карты?
router.GET("/mapSelectKeys", func(c *gin.Context) {
values := make(map[string]string)
values["language"] = "Go"
values["version"] = "1.7.4"
c.HTML(http.StatusOK, «mapSelectKeys.tmpl», gin.H{«myMap»: values})
})
- Language: {{ .myMap.language }}
- Version: {{ .myMap.version }}
$ curl http://localhost:9090/mapSelectKeys
- Language: Go
- Version: 1.7.4
Также мне понравился материал о шаблонах в Hugo, обязательно прочитайте его. Весь код с этими примерами можно взять здесь. Удачи!
По материалам: «Go: Templating with the Gin Web Framework»
1 051
Обзор модулей
| Revel — платформа веб-приложений для Go!
Модули — это пакеты, которые можно подключить к приложению. Они позволяют совместно использовать контроллеры, представления, ресурсы и
другой код между несколькими приложениями Revel или из сторонних источников.
Модуль должен иметь тот же макет, что и макет приложения Revel. Приложение «хостинг» объединит его следующим образом:
- Любые шаблоны в
module / app / views
будут добавлены в путь поиска загрузчика шаблонов - Любые контроллеры в модуле / приложении / контроллерах
- Активы становятся доступными через действие маршрута в форме
Static.ServeModule ("имя модуля", "общедоступный")
- Маршруты могут быть включены в ваше приложение с помощью строки маршрута модуля
: имя модуля
— см. Маршрутизацию
Revel поставляется с некоторыми встроенными модулями, такими как тестирование и задания.
Репозиторий модулей
Включение модуля
Чтобы добавить модуль в ваше приложение, добавьте строку в conf / app. conf
:
module.mymodulename = go / import / path / to / module
Вы можете добавить метод упорядочивания, вставив сортируемую строку между
слово модуль и имя модуля, как показано ниже.Это позволяет указать
в каком порядке должны загружаться представления, чтобы ваше приложение всегда было первым,
затем порядок модулей и, наконец, представления по умолчанию в Revel.
module.01.mymodulename = go / import / path / to / module
module.02.mymodulename2 = go / import / path / to / module2
Пустой путь импорта отключает модуль:
module.mymodulename =
Например, чтобы включить модуль запуска тестов:
модуль.testrunner = github.com/revel/modules/testrunner
Маршрутизация модуля
Сборка модуля
Лучшие Лрактики
Было бы неплохо убедиться, что все ваши представления находятся в собственном пространстве имен.
так что они не будут конфликтовать с другими приложениями, которые ваш модуль
импортировано в. Если у вас есть модуль под названием «Резервирование», было бы неплохо
идея, чтобы ваш путь просмотра выглядел как app / views / Reservation / Controller / Action.html
. Это означает, что вашему контроллеру необходимо вызвать RenderTemplate
вместо Визуализируйте
, чтобы выбрать правильный путь просмотра.
Инициализация модуля
revel.RegisterModuleInit (func (* revel.Module))
может быть для модуля, который будет вызываться сразу после всех модулей
загружены. Модуль revel.Module
, содержащийся в обратном вызове, является тем, который назначен для этого модуля. Это может
использоваться для различных целей.
Примером цели может быть получение регистратора, инициализированного для
модуль как следующий
var moduleLogger logger.MultiLogger
func init () {
упиваться.RegisterModuleInit (func (module * revel. Module) {
moduleLogger = module.Log
moduleLogger.Debug («Назначенный регистратор»)
})
}
Обратный вызов
, зарегистрированный в открытии .RegisterModuleInit
вызывается перед вызовом .OnAppStart
функции есть.
Высокопроизводительный минималистичный веб-фреймворк Go
Оптимизированный маршрутизатор
Высокооптимизированный HTTP-маршрутизатор с нулевым динамическим распределением памяти, который
расставляет приоритеты по маршрутам.
Масштабируемый
Создавайте надежный и масштабируемый RESTful API, легко организованный в группы.
Автоматический TLS
Автоматически устанавливайте сертификаты TLS из Let’s Encrypt.
HTTP / 2
Поддержка HTTP / 2 повышает скорость и обеспечивает лучший пользовательский интерфейс.
ПО промежуточного слоя
Множество встроенного промежуточного программного обеспечения для использования или определения собственного.Промежуточное ПО можно установить в корневом каталоге,
уровень группы или маршрута.
Связывание данных
Привязка данных для полезной нагрузки HTTP-запроса, включая JSON, XML или данные формы.
Обработка данных
API для отправки различных HTTP-ответов, включая JSON, XML, HTML, File, Attachment,
Встроенный, Stream или Blob.
Шаблоны
Рендеринг шаблонов с использованием любого шаблонизатора.
Расширяемый
Настраиваемая централизованная обработка ошибок HTTP.Легко расширяемый API.
Фреймворк
Golang для робототехники, дронов и Интернета вещей (IoT)
Meet The Code
Gobot делает управление роботами и устройствами невероятно простым и увлекательным.
Все, что вам нужно для начала, это установить Gobot:
$ go get -d -u gobot.io/x/gobot / ...
«Привет, мир» вещей
Эта программа подключается к Arduino и включает светодиод каждую секунду.
пакет основной импорт ( "время" "gobot. io/x/gobot" "gobot.io/x/gobot/drivers/gpio" "gobot.io/x/gobot/platforms/firmata" ) func main () { firmataAdaptor: = firmata.NewAdaptor ("/ dev / ttyACM0") led: = gpio.NewLedDriver (firmataAdaptor, "13") work: = func () { gobot.Every (1 * time.Second, func () { led.Toggle () }) } robot: = gobot.NewRobot ("бот", [] gobot.Connection {firmataAdaptor}, [] gobot.Device {led}, работай, ) robot.Start () }
У нас есть еще много примеров, которые помогут вам приступить к следующему проекту Интернета вещей!
Поддержка платформы
Gobot имеет расширяемую систему для подключения к аппаратным устройствам.В настоящее время поддерживаются следующие платформы робототехники и физических вычислений:
35 Платформы
Поддержка устройств, использующих связь общего ввода / вывода (GPIO), имеет общий набор драйверов, предоставляемый с помощью пакета gobot / drivers / gpio:
Поддержка устройств, использующих аналоговый ввод / вывод (AIO ) для обмена данными имеется общий набор драйверов, предоставляемый с помощью пакета «gobot / drivers / aio»:
Поддержка устройств, использующих связь между интегральными схемами (I2C), имеет общий набор драйверов, предоставляемый с помощью пакета «gobot / drivers / i2c» «пакет:
Поддержка устройств, использующих связь через последовательный периферийный интерфейс (SPI), имеет общий набор драйверов, предоставляемых с помощью пакета» gobot / drivers / spi «:
API
Gobot включает RESTful API для запроса статуса любое соединение, устройство или робот, работающий в вашем рое. Кроме того, он может отдавать команды непосредственно вашим устройствам и роботам. Посетите http://cppp.io для получения дополнительной информации.
Он также поставляется с интерфейсом robeaux React.JS, встроенным прямо в его сервер API для быстрой и простой настройки.
Дополнительную информацию об API Gobot можно найти в документации здесь
CLI
Gobot разработан для использования вместе с Gort, набором инструментов командной строки (CLI) для RobotOps. Gort предоставляет инструменты для поиска подключенных устройств, загрузки прошивки и отлично работает с Gobot.В Gobot также включен интерфейс командной строки для создания новых роботов и адаптеров.
Gobot также имеет собственный интерфейс командной строки, о котором вы можете узнать больше здесь.
Станьте частью Robot Evolution
Golang Framework: 20 лучших платформ Google Go в 2021 году
Эксклюзивный список 20 лучших фреймворков для Голанга в 2021 году
Каковы 20 лучших фреймворков для Голанга в 2021 году? Если вы ищете то же самое, вы находитесь в правильном месте.
Golang или Google Go — это язык программирования с открытым исходным кодом, разработанный Google.Они выпустили его в 2009 году для публичного использования. Golang легко изучить и внедрить.
Для Golang существует несколько IDE, таких как The Go Playground, repl.it и т. Д. Эти IDE позволяют разработчикам Golang запускать программу Go без ее установки. Также для упрощения задач разработчиков Go существует большое количество фреймворков / библиотек Go.
Поэтому в сегодняшней статье я перечисляю 20 самых популярных из них. Итак, без промедления, приступим!
Топ 20 фреймворков Golang
Джин-Гоник:
Это минималистичный фреймворк, состоящий только из необходимых библиотек и элементов.Кроме того, он поставляется с простой для понимания документацией для начинающих. Следовательно, он больше всего подходит для создания различных REST API.
Ревел:
Он поставляется с инструментом перезагрузки кода, который перестраивает весь проект при каждом изменении файла. При использовании Revel нет необходимости устанавливать какие-либо сторонние библиотеки. Следовательно, это упрощает изучение и внедрение.
Beego:
Как и Revel, в Beego нет необходимости устанавливать какие-либо внешние библиотеки.Потому что есть встроенный инструмент Bee Tool, который ищет изменения, а затем перестраивает весь проект.
Эхо:
Это более новый и минималистичный фреймворк. Он легкий, быстрый и состоит из богатого набора библиотек и плагинов. Тем не менее, он столь же эффективен, как и другие фреймворки.
Буффало:
Buffalo может быстро разрабатывать веб-приложения на Go, чем на любой другой платформе. Он поддерживает миграцию базы данных. В дополнение ко всему, он пользуется большой поддержкой сообщества.
Мартини:
Martini поддерживает тщательно подготовленную полную документацию. Он легко читается и понятен каждому. Он состоит только из необходимых функций / элементов. Но если вам нужны дополнительные функции, вы можете установить сторонние библиотеки.
Golang.org:
Это официальная структура Golang. Следовательно, он подходит для новичков, которые предпочитают учиться с нуля. Поставляется хорошо подготовленная документация. Поэтому, если вы новичок, сначала выберите Голанг.орг.
Негрони:
Негрони — альтернатива Мартини. В Мартини нет необходимости устанавливать какие-либо сторонние библиотеки. С другой стороны, в Negroni вы можете выбрать, что оставить, а что нет. Как элементы, библиотеки и т. Д. Таким образом, он состоит из минимального промежуточного программного обеспечения.
Ирис:
Это быстрый и надежный Go-фреймворк, способный создавать проекты любого типа. Из-за этого многие разработчики предпочитают использовать Iris. Его последняя версия — Iris 10.Он состоит из множества функций, библиотек. Поэтому ничего устанавливать снаружи не нужно.
Годжи:
Goji — это легкий и быстрый фреймворк, созданный на основе стандартной библиотеки Go. Он легко интегрируется с Einhorn, менеджером языковых сокетов.
Go-Rest:
Go-Rest — это, по сути, микросхема. Имеет ограниченную функциональность. API состоит всего из 3 методов: HandleGo, RunServer, HandlePost.
Gramework:
Gramework — это высокопроизводительный фреймворк Golang.Легко изучить и реализовать. Он отлично подходит для проектов с высокой нагрузкой. Он ориентирован на SPA и API.
Gocraft / веб-сайт:
Gocraft / web — это минималистичный фреймворк, состоящий только из необходимых функций. Это быстро и эффективно. Он подходит для приложений, где требуется высокая производительность.
Web.go:
Web.go похож на Gocraft / web. Как и Gocraft / web, это минималистичный фреймворк, содержащий только необходимые функции. Это быстро и эффективно. Следовательно, он подходит для приложений, где требуется высокая производительность.
Go Relax:
Он состоит из минимальных элементов и функций, которые необходимы для создания REST API. Это хорошая платформа для создания высокопроизводительных и качественных REST API.
Tigertonic:
Это минималистичный фреймворк Go, который включает только основные функции и элементы. Он создает высококачественные REST API.
Манго:
Это модульная структура Golang.Разработчик Mango имеет право выбирать, какие функции он хочет включить в проект. Нет необходимости искать или устанавливать сторонние библиотеки. Следовательно, все эти функции делают Mango популярным и мощным фреймворком Go.
Горилла:
Gorilla, скорее всего, самый продолжительный фреймворк Go. Это подходит для создания REST API. Это модульная структура. Он пользуется широкой поддержкой сообщества.
Сеть / HTTP:
Фреймворк
Net / HTTP является обязательным элементом, если вы читаете списки рассылки Go.Он пользуется большой поддержкой сообщества. Для сложных приложений вы можете интегрировать Net или HTTP с другим промежуточным ПО из фреймворков Go.
Комплект Go:
Go Kit — это эффективный инструментарий, позволяющий создавать микросервисы на Golang. Это немного самоуверенно, что означает, что вы можете изменить его в зависимости от ситуации.
Таким образом, я считаю, что у всех этих фреймворков Golang есть свои плюсы и минусы. Если вы новичок в Go, воспользуйтесь официальным фреймворком i.е. Golang.org. С другой стороны, если у вас есть опыт, вы можете пойти с любым другим.
Добро пожаловать в Fiber — веб-фреймворк в стиле Express.js, написанный на Go с
Вступление
Привет, мир! 👋 Сегодня мы рассмотрим молодой (но амбициозный) Fiber web framework on Go и поймем, что это не « еще один новый фреймворк, как X », а отличный инструмент для создания быстрых веб-приложений.
📌 Это будет обзорная статья, погружение в Fiber мы начнем дальше.
Оглавление
- Что такое клетчатка и почему она так хороша?
- Полезная информация для начала работы с Fiber
- Основные характеристики
- Контрольные точки
- Сопровождение проекта
Что такое клетчатка и чем она так хороша?
Следуйте официальному README из репозитория GitHub:
Fiber — это реализация веб-инфраструктуры HTTP в стиле Express.js, работающая на Fasthttp, самом быстром HTTP-движке для Go (Golang).В пакете используются те же рамочные соглашения, что и в Express.
И я склонен с этим согласиться. Если вы когда-либо реализовывали веб-приложение на Node.js с помощью Express.js (как я), то многие методы и принципы будут вам казаться очень общими!
Например, это стандартный Hello, World!
от Express. js:
// ...
const приложение = экспресс ()
app.get ('/', (req, res) => res.send ('Привет, мир!'))
app.listen (8080)
И аналогичный пример от Fiber:
//...
app: = fiber.New ()
app.Get ("/", func (c * fiber.Ctx) {
c.Send ("Привет, мир!")
})
app.Listen (8080)
Полезная информация для начала работы с Fiber
Собственно для старта нужна только официальная документация! 😉
Fiber, как веб-фреймворк , был создан с идеей минимализма , чтобы было легче начать создание серверной части веб-приложения для новых сусликов , но имеющих опыт работы с JavaScript.
Так говорят сами авторы:
Люди, переходящие с Node.js на Go, часто не могут научиться создавать свои веб-приложения. Этот проект призван упростить процесс быстрой разработки, но с нулевым выделением памяти и производительностью.
Основные особенности
- Оптимизирован для скорости и низкого использования памяти
- Быстрое программирование на стороне сервера
- Простая трассировка с параметрами
- Статические файлы с настраиваемым префиксом
- Промежуточное ПО с поддержкой
Next ()
- Конечные точки Express API
- Расширенная документация
Легко включить функцию предварительной вилки
Просто установите Prefork
на true
в вашем коде:
//. ..
app: = fiber.New ()
app.Prefork = true // включить предварительную вилку
app.Get ("/", func (c * fiber.Ctx) {
c.Send (fmt.Sprintf ("Привет, я рабочий #% v", os.Getpid ()))
// => Привет, я рабочий # 16858
// => Привет, я рабочий # 16877
// => Привет, я рабочий # 16895
})
app.Listen (8080)
Что такое префорк?
Включить функцию предварительной вилки вызовет несколько процессов go, прослушивающих один и тот же порт. В Nginx есть отличная статья о Socket Sharding, это изображение взято из той же статьи 👇
✨ Моя любимая функция-убийца ✨
И еще одна большая особенность (для меня) — это полный доступ ко всем методам и свойствам Fasthttp (подробнее об этом читайте в документации).
Да, вы не ослышались! Fiber чрезвычайно прост в использовании, как Express.js , и в нем есть все, что есть у Fasthttp сейчас и будет в будущем 🔥
Тесты 🤖
Щелкните здесь, чтобы увидеть все результаты тестов. Я принесу только немного.
- TechEmpower: сериализация JSON
- Go-Web: включить конвейерную обработку HTTP
Сопровождение проекта
- Добавьте звезду GitHub в проект.
- Сообщите о проекте в Твиттере.
- Помогите перевести README и API Docs на другой язык.
фото
[Название] Fiber Авторы https://fiber.wiki
[1] Нейт Грант https://unsplash.com/photos/dFF8z3WH5FI
P.S.
Если хотите больше — напишите комментарий ниже и следуйте за мной. Спасибо! 😘
объявляет о выпуске Bot Framework SDK для Go
Вследствие отличной обратной связи с BotKube, приложением для мессенджеров, таких как Slack и Mattermost, для мониторинга и отладки развертываний Kubernetes, мы заинтересовались интеграцией со стороны пользователей Microsoft Teams.Интеграция, которая поможет им отслеживать свой кластер Kubernetes из клиента Teams. Поскольку BotKube архитектурно разработан для работы независимо от платформы обмена сообщениями, его интеграция с Teams казалась жизнеспособной.
Microsoft Teams использует Microsoft Bot Framework, чтобы пользователи могли писать приложения-боты. Bot Framework — это набор инструментов, пакетов SDK, шаблонов и сервисов для создания диалоговых бот-приложений. Официальные SDK доступны для Python, C # .NET, Java и Javascript.Поскольку BotKube встроен в Go, возникла необходимость в интерфейсе для сервисов Bot Framework в Go для бесшовной интеграции BotKube с Teams. Это побудило нас написать Go SDK, который включает в себя сервисы Bot Framework.
Сегодня мы рады объявить о первом выпуске пакета SDK Bot Framework для Go; SDK, написанный на Go, который позволяет пользователям создавать приложения-боты на основе Bot Framework в Golang. SDK позволяет разработчикам приложений создавать диалоговых ботов для Microsoft Teams.
Бот-приложение, созданное с использованием этого SDK, может отправлять текст, интерактивные карточки и вложения в разговоре с пользователем. Помимо беседы с получением-ответом, разработчики могут создавать приложения-боты для отправки сообщений в беседе клиенту Teams.
SDK
Архитектура SDK основана на официальных SDK и, таким образом, следует всем рекомендациям Bot Framework. Он заботится об аутентификации для запросов диалога между бот-приложением и клиентом Teams в соответствии с рекомендациями.Все запросы и ответы от службы Bot Framework соответствуют определениям API, как указано. SDK предоставляет пользователям гибкость при создании сообщений, отправляемых клиенту Teams. Код для SDK публично доступен на GitHub.
Репозиторий SDK на GitHub содержит пример бота, показанный ниже. Бот просто повторяет все, что отправляет пользователь.
Echobot
В приведенном ниже фрагменте из примера показано, как создается обработчик, который является способом управления SDK для триггера события.Затем выполняется вызов функции SDK для отправки ответа. Полное объяснение можно найти здесь.
var customHandler = activity. HandlerFuncs {
OnMessageFunc: func (turn * activity.TurnContext) (schema.Activity, error) {
activity: = turn.Activity
activity.Text = "Echo:" + activity.Text
return turn.TextMessage (activity), nil
},
}
err: = adapter.ProcessActivity (ctx, activity, customHandler)
Хотя приведенный выше фрагмент отправляет текст, вложение можно отправить, изменив действие:
var customHandler = activity.HandlerFuncs { OnMessageFunc: func (turn * activity.TurnContext) (schema.Activity, error) { activity: = turn.Activity activity.Text = "Echo:" + activity.Text activity.Attachments = & schema.Attachment { ContentURL: "https://statics.teams.microsoft.com/evergreen-assets/skype/v2/smile/50.png", } return turn.TextMessage (activity), nil }, }
Интеграция с BotKube
SDK используется для взаимодействия BotKube с Teams. После интеграции пользователи смогут работать со своими кластерами Kubernetes с помощью клиента Teams.Клиент может отслеживать, отлаживать и запускать проверки в кластерах Kubernetes. Взаимодействие с пользователем будет очень похоже на то, как сегодня предлагает BotKube для Slack или Mattermost.
Дальнейшая работа
SDK улучшается для повышения производительности и добавляются новые функции, которые поддерживаются Bot Framework. Необходимая работа отслеживается на странице проблем репозитория GitHub. Мы будем рады приветствовать любой вклад в SDK.
(изображения)
Компас Лесли: основа для стратегии выхода на рынок
На мгновение упростите цель стартапа до одного действия: передачи убеждений.От основательницы к себе. От основателя до стартапа. От стартапа до инвестора. От стартапа до рынка. Эта последняя передача обвинительного приговора оказалась одной из самых незначительных. Согласно трехлетнему исследованию смертности стартапов, большинство стартапов терпят поражение после того, как собрали 1,3 миллиона долларов и примерно через 20 месяцев после последнего раунда финансирования. Конечно, этим неудачам способствуют многие факторы, но это показывает, насколько опасным может быть отрезок времени для стартапов, стремящихся проложить путь к рынку.
Что нужно, так это простой тест, который может сфокусировать стратегию вывода на рынок — тот, который может помочь стартапам разумно использовать ограниченные ресурсы, когда продукт впервые запускается и у компании есть один шанс произвести сильное первое впечатление.Для этих переломных моментов стартапам нужен компас, и за несколько десятилетий работы с ними я думаю, что этот подход указывает им правильное направление.
В 2003 году мы с несколькими коллегами-профессорами начали лоббировать Стэнфордскую высшую школу бизнеса (GSB) с целью разработки нового курса продаж. Цель курса будет ориентирована не на отдельных продавцов, а на то, как руководитель может позиционировать стартап для вывода продукта на рынок. Из всех профессоров меня с одинаковым энтузиазмом встретил руководитель отдела маркетинга.Мы заперлись и начали проектировать курс. Но мы представляли две разные области — маркетинг и продажи — и поэтому начали с вопроса: «В чем разница между маркетингом и продажами? Зачем Stanford GSB преподавать и то, и другое? »
Чтобы ответить, мы подошли к доске и нарисовали диаграмму, подобную этой:
Эта концептуальная структура демонстрирует взаимодействие между продажами и маркетингом в стратегии выхода на рынок. Когда продукт коммерциализирован и становится общедоступным, у компании есть две ключевые мускулы, которые она может использовать, чтобы вывести его на рынок: маркетинг и продажи.Большинство компаний, которые заходят так далеко, знают это интуитивно. Но эта диаграмма предполагает, что маркетинг и продажи — это противовесы. Чем меньше маркетинговых ходов используется для вывода продукта на рынок, тем больше должен быть задействован объем продаж. Если продажи не являются движущей силой стратегии вывода продукта на рынок, тем больше требуется маркетинга. Практически в каждом случае маркетинг или продажи играют ведущую роль в доставке продукта покупателям.
Задача состоит в том, чтобы узнать, какой из них активировать для вашей компании и конкретного продукта. Этот ответ особенно важен для стартапов, которые слишком часто вкладывают ресурсы в оба, чтобы избавиться от догадок, даже если при этом тратится много ресурсов.Ставки высоки. Если они выберут неправильный путь, они могут споткнуться о ворота. Например, наем высококвалифицированных и дорогих продавцов для продажи недорогого продукта может стать краеугольным камнем игры. После этой ошибки компания с высоким потенциалом может не развиваться достаточно быстро, чтобы конкурировать или достичь прибыльности.
Итак, в основе концепции — и стратегии вывода стартапа на рынок — лежит следующий вопрос:
Ваш продукт требует интенсивного маркетинга или продаж?
Чтобы лучше ответить на этот вопрос, давайте рассмотрим два крайних примера — зубную пасту Proctor and Gamble’s Crest и реактивные двигатели General Electric — чтобы проиллюстрировать структуру.Ключом к этой диаграмме является ось X, на которой следует учитывать несколько переменных, которые имеют решающее значение, но не исчерпывающие, при определении того, как вам следует выходить на рынок.
Первый шаг, который нужно сделать стартапам, — это определить, где они находятся в спектре, путем изучения переменных. Изучите каждый из них и определите, находится ли ваш продукт слева (с интенсивным маркетингом) или справа (с интенсивными продажами). Чтобы определить ответ, задайте себе следующие вопросы по каждой переменной. Давайте продолжим рассмотрение зубных паст и реактивных двигателей, чтобы проиллюстрировать структуру:
Цена определяется тем, как покупатель ценит продукт или услугу.Проще говоря, это то, сколько клиент готов заплатить, что связано с окупаемостью инвестиций, которую реализует клиент. Например, вы не можете позволить себе «продать» тюбик зубной пасты за 2 доллара. Чтобы доказать это, просто возьмите общую стоимость продавца и разделите ее на количество обращений за продажей в год. Вот почему никто не ходит по домам со словами: «Позвольте мне объяснить преимущества Crest перед Colgate». Но, допустим, у вас есть продукт, создание которого стоит 100 000 долларов, и вам нужно продать его за 200 000 долларов. Теперь вы придерживаетесь стратегии вывода на рынок с интенсивными продажами.
Спросите себя : Это большое или маленькое экономическое решение для покупателя?
Объем рынка определяется количеством потенциальных клиентов. Продукты могут быть проданы миллионам или даже миллиардам клиентов (через смартфоны) или лишь очень немногим. Например, миллиарды людей нуждаются в зубной пасте, но вряд ли более 100 производителей планеров ищут поставщика реактивных двигателей.
Исходный продукт VERITAS был компонентом операционной системы, который компания продавала производителям систем как часть их операционной системы UNIX.Когда VERITAS вышла на рынок, было много тех, кто хотел потратить деньги на маркетинг. Но Лесли считала иначе. В то время было около 100 производителей систем, поэтому тратить деньги на рекламу или списки рассылки не имело смысла. Вместо этого компания инвестировала в отраслевые выставки, но никогда не покупала киоски. Они знали, кто такие клиенты, поэтому разыскивали их, а не ждали.
Задайте себе вопрос : Им легче найти вас или вам их найти?
Когда дело доходит до уровня сложности , некоторые продукты чрезвычайно просты, в то время как другие требуют обучения, руководств и настройки для получения полезности.От турбин до дозвуковых воздухозаборников реактивные двигатели состоят из бесчисленного множества компонентов, в то время как использование тюбика зубной пасты совершенно очевидно.
Другой пример — Oracle ERP, внедрение которой может занять сотни людей и лет. Как сложный продукт, он всегда продается, но никогда не продается. В то время как Uber в высшей степени прост для потребителя. Все мы помним, как в первый раз открыли приложение, придумали, как позвонить в Uber, а затем на карте появилась маленькая машина.
Задайте себе вопрос : Может ли клиент пользоваться услугами самостоятельно или требуется образование?
Подгонка и отделка варьируется от готовых решений до всего, что требует нескольких шагов или точек опоры для работы. Поскольку зубная паста буквально выходит из коробки или тюбика, она отлично подходит и отличается прекрасной отделкой. Однако покупка реактивного двигателя — это только начало; он должен взаимодействовать и взаимодействовать с другими частями плоскости. Однако не путайте сложность с подгонкой и отделкой — некоторые очень сложные изделия имеют хорошую подгонку и отделку. Например, в Tesla — или в любом новом автомобиле — есть сотни компьютеров, но вам просто нужно повернуть ключ или нажать кнопку, чтобы запустить его. Независимо от формы и отделки — это ключВ большинстве случаев плохая подгонка и отделка долговечны только тогда, когда у покупателя нет лучшей альтернативы.
Спросите себя: После того, как все спроектировано, сделано и отгружено, есть ли еще что-то для потребителя?
Определение того, обслуживаете ли вы компанию : компанию или потребителя , — важный компонент стратегии выхода на рынок. Товары продаются предприятиям или напрямую потребителям. Каждому нужен свой тип отношений. Но важно отметить, что это показатель объема.Потребителей больше, чем предприятий, и первые более однородны, чем вторые. Подавляющему большинству людей нужна зубная паста, но подавляющему меньшинству предприятий реактивный двигатель не нужен.
Спросите себя: Продаю ли я преимущественно напрямую людям или компаниям?
Экономический срок службы клиента фокусируется на частоте и продолжительности взаимодействия с клиентом. Несмотря на то, что существует проблема лояльности к бренду, покупатель за всю жизнь купит сотни тюбиков зубной пасты.Учитывая, что реактивные двигатели служат много лет и существует около 100 производителей, сделок в год не больше, а, вероятно, гораздо меньше. Вопрос в характере взаимоотношений с заказчиком. Ожидаете ли вы, что у вас будут долгосрочные отношения с увеличением дохода с течением времени или увеличение количества транзакций с увеличением частоты с течением времени? Чем дольше продолжаются отношения, тем больше внимания уделяется тому, как я на самом деле доставляю и продаю этот продукт.
Задайте себе вопрос : Я измеряю успешные отношения с клиентами по транзакциям или продолжительности жизни?
С экономическим сроком службы потребителя связано то, требует ли продукт продаж с высокой степенью взаимодействия или с низким уровнем взаимодействия .Продажа реактивных двигателей часто требует «победы в дизайне», очень долгой, сложной технической кампании, которая приводит к большому количеству продаж в течение многих лет эксплуатации конкретной модели. Это требует построения отношений и может стоить миллиарды долларов за двадцать или тридцать лет. Для продаж, не требующих особого внимания, не требуется способность «приземляться и расширяться» или настраивать продажи в соответствии с отношениями. Чтобы купить одну и ту же зубную пасту или другую пасту, нужно немного истории.
Задайте себе вопрос : Насколько активно вы развиваете отношения с клиентом? Могут ли ваши усилия объединяться или в основном разовые?
Таким образом, Crest является ярким примером продукта, требующего больших затрат на маркетинг: он очень дешевый, покупается миллионами потребителей, прост в эксплуатации и отличается высокой степенью готовности, поскольку он готов к использованию сразу после покупки. Хотя P&G хотела бы иметь постоянных клиентов для своей зубной пасты, она имеет очень низкую стоимость переключения, и на решение о покупке может повлиять купон. Вы когда-нибудь встречали торгового представителя P&G, который превозносил достоинства Crest по сравнению с Colgate?
С другой стороны, реактивный двигатель General Electric представляет собой продукт, требующий больших объемов продаж. Цена на двигатель исчисляется миллионами долларов, он продается примерно 100 производителям самолетов, имеет невероятно сложную технологию, плохо подгоняется и отделывается, так как после продажи он всегда требует тщательного проектирования и настройки.Это лучший опыт продаж, потому что это победа в дизайне. Заказчику нужны топливная экономичность, строгие пороги веса, тяга, определенный уровень шума и сотни других характеристик. Производители реактивных двигателей тратят много времени не только на создание продуктов, но и на определение и выполнение контрактов — это очень важная вещь. По всем этим причинам я никогда не видел, чтобы реактивный двигатель GE предлагался для продажи в Walmart.
Марк Лесли
В качестве концептуальной основы ключ не столько в том, чтобы определить точную точку вашей компании на спектре, сколько в том, чтобы знать, какой подход (или в какой половине диаграммы) позиционируется ваш стартап.В зависимости от того, будет ли ваш новый продукт больше похож на зубную пасту Crest или на реактивный двигатель GE, вы сможете определить, должна ли ваша стратегия вывода на рынок быть более интенсивной для маркетинга или для продаж.
Если вы занимаетесь маркетингом, товар покупается. Если он требует больших объемов продаж, товар продается.
Есть исключения, но, по большому счету, успешность стратегии выхода на рынок зависит от того, насколько разумно каждый фактор находится в одной половине диаграммы. Вот истории двух компаний, которые иллюстрируют важность согласованности:
Стартап онлайн-услуг по управлению персоналом Gusto — пример хорошего согласования, которое привело к успешной стратегии выхода на рынок. Gusto — ранее известный как Zenpayroll — работает на рынке, где инструменты для расчета заработной платы созданы для более крупных компаний, включают в себя высокопроизводительные интерфейсы и требуют некоторого обучения или группы поддержки для устранения неполадок.
Когда Gusto решил предложить решение множеству крошечных компаний, ему пришлось изменить другие аспекты его выхода на рынок. Например, компания решила использовать подход, не требующий вмешательства пользователя, и продавать свои услуги через Интернет. Несмотря на то, что это продукт средней сложности, он отличается исключительно высокой посадкой и отделкой, так как он занимает всего несколько минут на установку и интуитивно понятен в использовании.По сравнению с конкурентами, его цена невысока и составляет около 40 долларов в месяц с учетом номинальной платы за сотрудника. Технически это компания B2B, но вторая буква «Б» больше похожа на букву «С», учитывая ее многочисленные, более мелкие клиенты.
Сегодня у Gusto около 50 000 клиентов. Вот как выглядит его диаграмма:
Важно отметить, что не каждая галочка должна быть на одной стороне диаграммы, чтобы развернулась успешная стратегия вывода на рынок. Однако стартапы должны знать о точках несоответствия, чтобы вносить коррективы, поскольку Gusto приспосабливал свой бизнес B2B к подходу B2C с самого начала с учетом своих многочисленных клиентов меньшего размера.
Напротив, поучительная история — это история стартапа Nebula в области частных облачных вычислений. Вроде бы все было, по крайней мере, на бумаге. Соучредитель, который помог запустить OpenStack. Команда руководителей, в которую входили человек, который помог изобрести первый браузер, и бывший руководитель Dell. Это выдающееся основание привлекло инженеров НАСА и поддержку со стороны ведущих инвесторов.
После того, как компания выскочила из ворот с известными клиентами, такими как DreamWorks, Sony и Genentech, и выручила около 1 миллиона долларов в первом квартале, темпы роста замедлились. Nebula надеялась и планировала привлечь многих клиентов, но со стартовым комплектом в 275000 долларов у них была относительно дорогая цена начального уровня, позволяющая клиентам зарегистрироваться без длительного и трудного цикла продаж.
На фоне появившегося тогда рынка частных облачных вычислений и долгожданного движения Openstack потенциальные клиенты искали решение, которое было бы столь же легко настраиваемым, как и публичное облако Amazon. Nebula запущена как «устройство все в одном». После первых усилий по выводу на рынок компания осознала, что ее решение требует более высокого уровня продаж, обслуживания, поддержки и обучения, чем может обеспечить любой стандартный продукт.
Отдел продаж Nebula нацелился на компании, но продукт не был полностью разработан для них. Например, экзотическая консоль его серверов, на которой даже отображались клингонские символы, и сенсорный дисплей были призваны взволновать техноратов. Но серьезные пользователи бизнес-вычислений прятали серверы в темных центрах обработки данных, где мало кто взаимодействовал с продуктом.
Наконец, когда Nebula была запущена, она ожидала, что решение plug-in-play не потребует особого внимания, но из-за защитных действий VMWare и простоты использования со стороны AWS коммерческое предложение Nebula потеряло свою силу и потребовалось быть еще более персонализированным и нишевым, чтобы получить поддержку.
Nebula никогда не набирала скорость и не останавливалась через четыре года после запуска. Вот как выглядел график при запуске (оранжевые галочки) и каким, оглядываясь назад, он должен был быть (фиолетовые галочки), когда планировалось запустить, по словам Лесли.
Работа с этой концептуальной структурой означает не только повышение вероятности более успешной стратегии выхода на рынок, но и определение того, как лучше всего структурировать отношения между продажами и маркетингом для поддержания этой динамики.
Способ построения эффективной стратегии выхода на рынок — это знать, что лидирует маркетинг или продажи. Если ответы на ваши вопросы в вашей структуре — о цене, размере рынка, сложности и других — совпадают с левым краем диаграммы, маркетинг должен взять на себя инициативу со стратегией выхода на рынок. Если подавляющее большинство ответов совпадают с правильными, продажи должны выйти вперед.
Продажи служат маркетингу
В сценарии слева маркетинг имеет приоритет. В этом случае маркетинг генерирует спрос. С помощью своих кампаний он вызывает достаточно сильный аппетит, чтобы люди покупали продукт самостоятельно. Продажи служат этому усилию, создавая «место». Это означает, что они выстраивают в ряд дистрибьюторов, розничных продавцов и мерчендайзеров так, чтобы у продукта было присутствие — по сути, это место, где его можно найти и купить. Возвращаясь к спектру зубных паст и реактивных двигателей, исследуйте культуру компании Proctor and Gamble, ориентированной на маркетинг. Одна из наиболее ценных должностей — с наибольшей мобильностью — это менеджер по продукту, который занимается брендом, рекламой, PR, запуском и многим другим.
Маркетинг обслуживает продажи
В сценарии справа продажи имеют приоритет. В этом режиме ответственность маркетинга заключается в создании и передаче квалифицированных потенциальных клиентов в торговую организацию. Они управляют различными источниками лидов через организованную структуру конвейера. Они предоставляют дополнительные материалы и программы для поиска потенциальных клиентов. В основе успеха организации лежит то, что отдел продаж превращает квалифицированного лида в выигрыш клиента.
Как меняет приоритетность
Важно отметить, что по мере того, как компания находится на этих осях, приоритетность — для маркетинга или продаж — наиболее высока в левой и правой крайних позициях соответственно.По мере того, как вы приближаетесь к середине, феномен «обслуживания» ослабевает. На среднем уровне маркетинг и продажи связаны на равных.
Понимание вашей стратегии выхода на рынок как функции приоритета продаж или маркетинга имеет первостепенное значение. Используйте эту простую структуру, чтобы определить, какой у вас продукт, требующий больших объемов продаж или маркетинга, который вы выводите на рынок. Сделайте это определение, определив, где находится ваш продукт, по семи ключевым переменным: цена, размер рынка, сложность технологии, подгонка и отделка, тип клиента, срок службы клиента и уровень взаимодействия с клиентами.Фреймворк предоставляет ключевой вопрос, чтобы помочь определить, где находится продукт на каждом векторе, но больше ориентирован на то, чтобы помочь стартапам понять, все ли они согласованы. Если так, это не только будет способствовать более плавной стратегии выхода на рынок, но также поможет маркетингу и продажам лучше координировать свои усилия по привлечению клиентов.
Неважно, делаете ли вы зубную пасту или реактивные двигатели — или что-то среднее между ними. Любой продукт можно купить или продать при правильном согласовании и структуре команды, которая его поддерживает.Вопросы, которые задает этот фреймворк, затрагивают самую суть построения великих компаний и сводятся к самому главному вопросу: что мы строим и для кого? Чтобы обеспечить успешный выход на рынок, необходимо задать эти вопросы и дать на них ответы. Конечно, не существует единой системы, которая гарантировала бы победу, но по мере того, как стрелка компаса движется, эта будет указывать вам компанию в правильном направлении. И это само по себе конкурентное преимущество.
Марк Лесли — преподаватель Стэнфордской высшей школы бизнеса, где он ведет курсы по предпринимательству, этике и организации продаж.Он также является управляющим директором Leslie Ventures, частной инвестиционной компании, и входит в советы директоров двух публичных компаний, шести частных компаний и трех некоммерческих организаций. Ранее Лесли был председателем-основателем и генеральным директором VERITAS Software.