Связывание моего HTML с Go Lang - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь показать мой набор результатов и переменные из .Go Lang на страницу HTML.

Принимая это древовидное представление в качестве моего рабочего пространства. Home.HTML

 <div id="Golang"><p>My Name is : <i>{{.myName}}</i></p></div>
    <div id="Golang"><p>Some Random Database Test: <br>{{.Country}} {{.City}} </p></div>

db.Go

package main

import (
    "database/sql"
    "fmt"
    "html/template"
    "log"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
)

type world struct {
    Country sql.NullString `json:"country"`
    State   sql.NullString `json:"state"`
    City    sql.NullString `json:"city"`
    Abbr    string         `json:"abbriviation"`
    id      int            `json:"id"`
    CCode   int            `json:"CountryCode"`
}

func main() {

    name := "Sam"

    dsn := "root:1234@tcp(127.0.0.1:3306)/script"
    // Open database
    fmt.Println("We're going to connect a MySql Db")
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }

    defer db.Close()

    fmt.Println("Successfully connected to Mysql Db")

    results, err := db.Query("SELECT * FROM CountryDb WHERE Country =?", "India")
    if err != nil {
        panic(err.Error())
    }

    for results.Next() {
        var tag world
        err = results.Scan(&tag.Abbr, &tag.Country, &tag.CCode, &tag.State, &tag.City)
        if err != nil {
            panic(err.Error()) 
        }
        log.Printf(tag.Abbr, tag.Country, tag.CCode, tag.State, tag.City)
    }

}

Теперь, как я могу показать значения из моей программы Go в тегах HTML. Это моя первая программа go, и я не очень хорошо знаю этот язык. Я прохожу некоторые онлайн-уроки, но способ их написания не очень полезен. поэтому любая помощь в этом будет оценена. Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

Создать файл шаблона:

tpl.gohtml

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>
<body>
<h1>The Number from Go Code is: {{.}}</h1> 
</body>
</html>

и ваш main.go

package main

import (
    "log"
    "os"
    "text/template"
)

var tpl *template.Template

func init() {
    tpl = template.Must(template.ParseFiles("tpl.gohtml"))
}

func main() {
    err := tpl.ExecuteTemplate(os.Stdout, "tpl.gohtml", 42)
    if err != nil {
        log.Fatalln(err)
    }
}

В функции init вы анализируете созданный выше файл шаблона. Если у вас их много, вы можете использовать ParseGlob(pattern string) (*Template, error) Но для этого примера вы можете проанализировать шаблон по имени. После этого мы выполняем шаблон с именем tpl.gohtml и распечатываем его на Stdout и обрабатываем ошибки.

Теперь вы можете запустить код с помощью go run main.go и получите следующий вывод:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>
<body>
<h1>The meaning of life: 42</h1>
</body>

Вы можете видеть, что последний аргумент функции ExecuteTemplate() - это данные, которые вы передали в шаблон. Вы также можете использовать срезы, карты или самостоятельно созданные сложные типы данных для шаблона и выполнять итерации по нему.

main.go с ломтиком

package main

import (
    "log"
    "os"
    "text/template"
)

var tpl *template.Template

func init() {
    tpl = template.Must(template.ParseFiles("tpl.gohtml"))
}

func main() {

    sages := []string{"This", "is", "a", "string", "slice"}

    err := tpl.Execute(os.Stdout, sages)
    if err != nil {
        log.Fatalln(err)
    }
}

и соответствующий шаблон может выглядеть так

tpl.gohtml

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Slice Data</title>
</head>
<body>
<ul>
    {{range $index, $name := .}}
    <li>{{$index}} - {{$name}}</li>
    {{end}}
</ul>
</body>
</html>

Это даст вам следующий вывод:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Slice Data</title>
</head>
<body>
<ul>

    <li>0 - This</li>

    <li>1 - is</li>

    <li>2 - a</li>

    <li>3 - string</li>

    <li>4 - slice</li>

</ul>
</body>

Если вы хотите создать html-файлы с этим кодом, просто используйте go run main.go > outputfilename.html

Golang Web Dev Github. Источники удемского курса

Шаблоны Go

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...