cari
  • Log masuk
  • Daftar
Penetapan semula kata laluan berjaya

Ikuti proiects vou berminat dengan andi aet terbaru mengenai mereka

Jadual Kandungan
Fahami mekanisme penghantaran konteks templat Go
Penyelesaian: Lulus konteks secara eksplisit
Kod contoh
Rumah pembangunan bahagian belakang Golang Cara menghantar data ke templat sebaris dalam templat bahasa Go

Cara menghantar data ke templat sebaris dalam templat bahasa Go

Jan 11, 2026 am 09:21 AM

Cara menghantar data ke templat sebaris dalam templat bahasa Go

Artikel ini meneroka dengan mendalam masalah menghantar data kepada templat terbenam (`disertakan`) dalam pakej `teks/template` atau `html/template` bahasa Go. Apabila templat sebaris dirujuk melalui `{{templat "nama"}}` dalam templat utama, templat sebaris menerima data `tiada` secara lalai, mengakibatkan ketidakupayaan untuk mengakses pembolehubah konteks templat utama. Penyelesaiannya adalah untuk menghantar konteks semasa (`.`) secara eksplisit ke templat sebaris, iaitu menggunakan sintaks `{{template "name" .}}`, memastikan templat sebaris boleh memaparkan data yang diperlukan dengan betul.

Fahami mekanisme penghantaran konteks templat Go

Apabila membina aplikasi web menggunakan pakej teks/templat atau html/templat bahasa Go, untuk mencapai penggunaan semula kod dan modularisasi, kami sering membahagikan struktur halaman kepada berbilang fail templat, seperti header.html, footer.html, index.html, dll. Templat utama merujuk kepada templat terbenam ini melalui sintaks {{template "name"}}. Walau bagaimanapun, kekeliruan biasa ialah apabila data kontekstual templat utama (seperti struktur atau peta yang mengandungi tajuk dan kandungan halaman) berjaya dihantar ke templat utama, tetapi templat sebaris tidak dapat mengakses data ini.

Inti masalah terletak pada tingkah laku lalai {{template "name"}}. Menurut dokumentasi templat Go rasmi, apabila menggunakan {{template "name"}}, templat yang dirujuk akan dilaksanakan dengan nil sebagai konteks data. Ini bermakna walaupun templat utama menerima data kontekstual yang kaya, templat sebaris tidak boleh mewarisi data ini tanpa menyatakannya secara eksplisit. Oleh itu, apabila cuba mengakses tajuk melalui {{.Title}} dalam header.html, nilainya akan kosong.

Penyelesaian: Lulus konteks secara eksplisit

Untuk menyelesaikan masalah ini, kami perlu menghantar data konteks templat semasa secara eksplisit kepada templat sebaris apabila merujuknya. Sintaks yang betul ialah {{template "name" pipeline}}, dengan saluran paip mewakili data yang akan dihantar. Dalam kebanyakan kes, kami ingin lulus keseluruhan konteks templat semasa, yang boleh dicapai melalui pengendali titik (.).

Oleh itu, menukar {{template "header"}} dalam templat utama kepada {{template "header" .}} boleh menyelesaikan masalah. Titik (.) di sini mewakili konteks pelaksanaan templat semasa, yang akan menghantar semua data yang diterima oleh templat utama kepada templat pengepala secara utuh.

Kod contoh

Mari kita lihat contoh konkrit untuk menunjukkan cara menghantar data dengan betul kepada templat sebaris.

1. Kod hujung belakang bahasa Go (main.go)

 pakej utama

import (
    "html/template"
    "log"
    "bersih/http"
    "path/failpath"
)

// Struktur PageData digunakan untuk membawa data yang diperlukan untuk jenis halaman PageData struct {
    Rentetan tajuk
    Rentetan badan
}

var templates *template.Template

func init() {
    // Muatkan semua fail templat // Nota: Fungsi Must digunakan di sini untuk memudahkan pengendalian ralat, dan persekitaran pengeluaran haruslah templat yang lebih ketat = template.Must(template.ParseFiles(
        filepath.Join("templates", "index.html"),
        filepath.Join("templates", "header.html"),
        filepath.Join("templates", "footer.html"),
    ))
}

func mainHandler(w http.ResponseWriter, r *http.Request) {
    data := PageData{
        Tajuk: "Tutorial Templat Bahasa Pergi",
        Badan: "Ini ialah kandungan halaman utama, menunjukkan cara menghantar data ke templat sebaris.",
    }

    // Laksanakan templat index.html dan hantar data sebagai context err := templates.ExecuteTemplate(w, "index.html", data)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        log.Printf("Ralat semasa melaksanakan templat: %v", err)
        kembali
    }
}

func main() {
    http.HandleFunc("/", mainHandler)
    log.Println("Pelayan bermula pada :8080")
    log.Fatal(http.ListenAndServe(":8080", tiada))
}

2. Fail templat utama (templates/index.html)

 

<kepala>
    <!-- Hantar konteks semasa (.) dengan betul ke templat pengepala -->
    {{template "header" .}} 

<badan>
    <h1>{{.Title}}</h1>
    <p>{{.Badan}}</p>

    <!-- Templat pengaki biasanya tidak perlu menerima data tertentu, tetapi ia boleh dihantar jika perlu -->
    {{template "footer" .}}
</badan></kepala>

Atas ialah kandungan terperinci Cara menghantar data ke templat sebaris dalam templat bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat popular

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan corak fasad (Fasad) dalam bahasa Golang Go memudahkan API sistem kompleks Cara menggunakan corak fasad (Fasad) dalam bahasa Golang Go memudahkan API sistem kompleks Mar 10, 2026 pm 12:27 PM

Fasad harus digunakan apabila pemanggil perlu menulis lebih daripada 5 baris permulaan, memanggil lebih daripada 3 pakej dalam urutan dan mengendalikan keadaan perantaraan secara manual; ia harus melepasi antara muka dan bukannya jenis tertentu, menyediakan 3 hingga 5 kaedah teras dan menguatkuasakan pembersihan sumber Shutdown().

Cara menggunakan refleksi untuk mendapatkan teg struktur dalam kemahiran menghurai StructTag bahasa Golang Go Cara menggunakan refleksi untuk mendapatkan teg struktur dalam kemahiran menghurai StructTag bahasa Golang Go Mar 04, 2026 pm 10:54 PM

Mengapakah struct.Tag.Get mengembalikan rentetan kosong? Teg medan struktur tidak boleh dibaca secara automatik dan mesti dihuraikan secara eksplisit menggunakan jenis reflect.StructTag. Memanggil medan.Tag secara terus akan mendapat rentetan asal (seperti `json:"name,omitempty"`), dan nilai tidak boleh diperoleh tanpa menghuraikan. Kesilapan biasa ialah menulis: field.Tag atau field.Tag.Get("json") - ini akan panik kerana field.Tag ialah jenis rentetan dan tidak mempunyai kaedah Get. Pendekatan yang betul: penggunaan pertama reflect.TypeOf(t).Fi

Cara mengoptimumkan penggunaan memori perkhidmatan mikro dalam Golang Perbandingan pemilihan rangka kerja RPC berprestasi tinggi bahasa Go Cara mengoptimumkan penggunaan memori perkhidmatan mikro dalam Golang Perbandingan pemilihan rangka kerja RPC berprestasi tinggi bahasa Go Mar 05, 2026 pm 05:51 PM

Jika pprof digunakan secara tidak betul, 90% masalah ingatan tidak dapat dikesan: pendaftaran eksplisit, port bebas, pensampelan khusus tempat kejadian (timbunan/goroutine/allocs) diperlukan, gunakan gotoolpprof untuk analisis interaktif, gunakan penyegerakan.Pool dengan berhati-hati dan beri keutamaan kepada pemprosesan JSON net/http asli.

Cara melaksanakan mod penstriman sebelah pelayan gRPC di Golang. Pertempuran praktikal penstriman data masa nyata dalam bahasa Go Cara melaksanakan mod penstriman sebelah pelayan gRPC di Golang. Pertempuran praktikal penstriman data masa nyata dalam bahasa Go Mar 10, 2026 am 10:21 AM

Strim sebelah pelayan ialah mod komunikasi gRPC dengan satu permintaan daripada klien dan berbilang respons daripada pelayan. Ia sesuai untuk senario "tekanan tunggal, terima berbilang" seperti tolakan masa nyata dan tarik log. Takrifan perlu mengisytiharkan pulangan rpcGetMetrics(MetricsRequest)(streamMetricsResponse) dalam .proto. Pelaksanaan sebelah pelayan mesti memanggil strim.Send() beberapa kali dan elakkan daripada menggunakan semula kejadian yang sama. Pelanggan mesti menggelung Recv() dan mengendalikan io.EOF dengan betul.

Alat analisis prestasi SQL dalam pembangunan web Golang Bahasa Go GORM-Query-Logger Alat analisis prestasi SQL dalam pembangunan web Golang Bahasa Go GORM-Query-Logger Mar 11, 2026 am 11:12 AM

GORM tidak mencetak SQL lengkap secara lalai untuk mengelakkan data sensitif daripada bocor dan mengurangkan volum log. Ia adalah perlu untuk menyesuaikan Logger dan menulis semula LogMode dan kaedah Maklumat untuk menyambung sql.String() dan sql.Variables untuk mencapai output berparameter. SlowThreshold hanya mengira masa yang dibelanjakan pada lapisan GORM dan tidak termasuk menunggu kunci rangkaian dan pangkalan data.

Cara melaksanakan kemas kini panas pusat konfigurasi perkhidmatan mikro dalam integrasi konfigurasi Apollo bahasa Golang Go Cara melaksanakan kemas kini panas pusat konfigurasi perkhidmatan mikro dalam integrasi konfigurasi Apollo bahasa Golang Go Mar 10, 2026 am 10:52 AM

ApolloClient.GetConfig() tidak boleh mendapatkan nilai yang dikemas kini kerana ia tidak memantau perubahan secara lalai. Anda perlu mendayakan pengundian panjang secara eksplisit (WithLongPolling(true)) dan mendaftarkan panggilan balik AddChangeListener. Dalam panggilan balik, nyahsiri konfigurasi baharu dan gunakan penunjuk atom untuk menukar kejadian.

Cara menghuraikan dan menjana fail CSV dalam pengekodan bahasa Golang Go/petua perpustakaan standard csv Cara menghuraikan dan menjana fail CSV dalam pengekodan bahasa Golang Go/petua perpustakaan standard csv Mar 10, 2026 am 11:39 AM

csv.Reader lalai kepada ErrFieldCount dan bukannya panik jika bilangan medan tidak konsisten, tetapi mengabaikan ralat akan menyebabkan panik seterusnya; untuk bertolak ansur dengan turun naik, FieldsPerRecord=-1 mesti ditetapkan; csv.Encoder tidak mengendalikan pengekodan, dan bahasa Cina perlu ditranskod secara manual atau menambah UTF-8BOM; ReadAll terdedah kepada OOM, dan gelung Baca harus digunakan sebaliknya; konfigurasi seperti pembatas tersuai mesti ditetapkan sebelum membaca dan menulis buat kali pertama.

Cara menggunakan Dapr untuk membina perkhidmatan mikro asli awan dalam Panduan Pembangunan SDK Dapr bahasa Golang Go Cara menggunakan Dapr untuk membina perkhidmatan mikro asli awan dalam Panduan Pembangunan SDK Dapr bahasa Golang Go Mar 10, 2026 am 11:21 AM

Punca utama ialah goroutine utama tidak disekat. dapr.Run() hanya mendaftarkan komponen dan memulakan perkhidmatan tetapi tidak menyekat utas utama. Anda perlu menunggu dengan jelas dengan pilihan{} atau isyarat. Beritahu; logik perniagaan harus dihantar sebagai panggilan balik atau dimulakan dalam goroutine bebas.

Artikel berkaitan