Как экспортировать переменную / свойство в go lang - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать веб-приложение MVC в golang, не используя никаких фреймворков. Как я планирую этого добиться, это создать экземпляр http.Server {} с http.NewServeMux () в качестве его обработчика, как указано ниже:

 sm := http.NewServeMux()
    sm.Handle("/route1", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "static/front-office/index.html")
    }))
    sm.Handle("/route2", handleSomething())
    sm.Handle("/route3", handleSomething())
    sm.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))


    frontEndUIServer := http.Server{
        Addr:    ":9000",
        Handler:  sm,
    }
    go frontEndUIServer.ListenAndServe()

, а затем сделать свойство sm экспортируемым, чтобылюбые другие файлы go могут импортировать его и создавать на нем обработчики, тем самым реализуя мой контроллер. Поскольку я новичок в goLang, мой вопрос сейчас заключается в том, как сделать свойство sm экспортируемым?

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Вы можете определить свое веб-приложение в пакете mywebapp следующим образом:

package mywebapp

import "net/http"

var SM *http.ServeMux

func init() {
    SM = http.NewServeMux()
    SM.Handle("/route1", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "static/front-office/index.html")
    }))
    SM.Handle("/route2", handleSomething())
    SM.Handle("/route3", handleSomething())
    SM.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))

    frontEndUIServer := http.Server{
        Addr:    ":9000",
        Handler: SM,
    }
    go frontEndUIServer.ListenAndServe()
}

Экспортируемый ServeMux сервер экспортируется, поэтому другие пакеты могут добавлять обработчики. Сервер запускается сразу после импорта пакета.

0 голосов
/ 01 октября 2019

Когда вы спрашиваете "как сделать свойство sm экспортируемым", я предполагаю, что вы имеете в виду в смысле узла? Если да, то концепция, которую вы ищете, это «пакеты».

https://www.golang -book.com / books / intro / 11

Это позволяет сделать ссылкудля функциональности в одном пакете в других пакетах с помощью «импорта». Обратите внимание, что имя функции, к которой вы хотите получить доступ, должно начинаться с заглавной буквы против строчной буквы, на которую можно ссылаться только в пакете.

Обычно веб-сервер создается в «основной» функции / пакете с контроллерами. привязан к указанным вами маршрутам.

Это хороший базовый пример: https://astaxie.gitbooks.io/build-web-application-with-golang/en/03.2.html

...