@Abcdefgk

Цикл в шаблоне Go, где данные?

Прохожу тут начала взаимоотношений http-сервера и базы данных. Но внезапно споткнулся не на БД - тут всё понятно.
Вот есть у меня такие две структуры-заготовки
type Book struct {
	isbn   string
	title  string
	author string
	price  float32
}

var Books struct {
	Items []*Book
}

и соответствующая таблица в БД (PostgresQL, но это не важно) с тремя строчками
Делаю запрос и забираю результат:
for rows.Next() {
	bk := new(Book)
	err := rows.Scan(&bk.isbn, &bk.title, &bk.author, &bk.price)
	if err != nil {
		http.Error(w, http.StatusText(500), 500)
		return
	}
	Books.Items = append(Books.Items, bk)
}

Теперь если я отдам результат в ответ сервера вот так в цикле
for _, b := range Books.Items {
	fmt.Fprintf(w, "%s, %s, %s, £%.2f\n", b.isbn, b.title, b.author, b.price)
}

то всё нормально.
Но я хочу, допустим, вывести эти строки в шаблоне, а ещё дописать там простую форму и попробовать добавлять из неё в базу. Но сначала - вывести на страницу что есть. Казалось бы, надо только перенести цикл в шаблон.
Пишу тут же в файле такую строку
var str = `<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Books</title>
</head>
<body>
	{{ range .Items }}<div><b>{{ .isbn }}</b> {{ .title }} {{ .author }} {{ .price }}</div>
	{{else}}<div><strong>no rows</strong></div>
	{{end}}
</body>
</html>
`

И заменяю в коде цикл на вот это
html, err := template.New("books").Parse(str)
if err != nil {
	fmt.Println(err)
}
html.Execute(w, Books)

и ничего не работает.
Объясните, плиз, что не так?
Ошибок никаких не выдаёт, а данные в шаблон не вставляются. Исходный код страницы в результате вот такой
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Books</title>
</head>
<body>
	<div><b>

и на этом исполнение (Execute) просто останавливается.
Вот, не знаю уже, на что смотреть.
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Для начала попробуйте просто экспортировать поля структуры, то есть именовать их с большой буквы
type Book struct {
  Isbn   string
  Title  string
  Author string
  Price  float32
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 17:06
15000 руб./за проект
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект