정적 사이트 생성기는 가볍고 빠르며 확장 가능한 웹사이트 생성을 단순화하는 강력한 도구입니다. 블로그, 문서 또는 소규모 비즈니스 사이트를 구축하는 경우 Markdown으로 작성된 콘텐츠를 효율적이고 정적 HTML 파일로 변환합니다.
이 가이드에서는 성능, 단순성 및 동시성으로 유명한 프로그래밍 언어인 Go에서 정적 사이트 생성기(SSG)를 만들어 보겠습니다. Markdown 파일을 입력으로 사용하고, 사전 정의된 HTML 템플릿을 사용하여 처리하고, 아름답고 정적인 HTML 페이지를 출력하는 CLI 도구를 구축하겠습니다.
왜 이것을 구축해야 할까요?
정적 사이트 생성기는 여러 가지 실용적인 용도로 사용될 수 있습니다.
- 문서 사이트: 기술 문서를 빠르게 로드하는 사이트를 생성합니다.
- 블로그: 마크다운으로 콘텐츠를 작성하고 손쉽게 배포하세요.
- 프로토타이핑: 소규모 프로젝트나 쇼케이스를 위한 정적 사이트를 빠르게 가동하세요.
이 프로젝트에 Go를 사용하는 이유는 무엇인가요?
- 속도: Go는 기본 기계 코드로 컴파일하여 이와 같은 도구를 엄청나게 빠르게 만듭니다.
- 동시성: Go를 사용하면 여러 파일을 동시에 쉽게 처리할 수 있습니다.
- 단순성: Go의 구문은 최소화되어 있으며 CLI 도구 구축도 간단합니다.
이 프로젝트를 만들면서 정말 즐거운 시간을 보냈습니다 :)
프로젝트 설정
코드를 살펴보기 전에 프로젝트 구조를 간략히 살펴보겠습니다.
static-site-generator/ ├── cmd/ │ └── ssg/ │ └── main.go # Entry point ├── internal/ │ ├── generator/ │ │ └── html.go # HTML generation logic │ ├── parser/ │ │ ├── frontmatter.go # YAML frontmatter parsing │ │ └── markdown.go # Markdown processing │ └── watcher/ │ └── watcher.go # File change detection ├── templates/ │ └── default.html # HTML template ├── content/ # Markdown files └── output/
처음부터 빌드하려면 이 명령을 실행하여 프로젝트의 Go 모듈을 초기화하세요
go mod init
주요 기능:
마크다운을 HTML로 변환 ?
메타데이터 구문 분석을 위한 YAML 머리말
맞춤형 출력을 위한 HTML 템플릿
감시자로 실시간 파일 변경 감지 ?
프로젝트 구축
1. 리포지토리 복제
시작하기 전에 저장소를 로컬 시스템에 복제하세요.
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
타빈텔
/
정적 사이트 생성기
정적 사이트 생성기
Go로 작성된 빠르고 간단한 정적 사이트 생성기
이렇게 하면 SSG를 빌드하고 실행하는 데 필요한 모든 시작 파일과 프로젝트 구조가 제공됩니다.
2. 마크다운 파서
Markdown 파서는 .md 파일을 HTML 콘텐츠로 변환하는 작업을 처리합니다. 자동 제목 ID와 같은 확장 기능도 사용할 수 있습니다.
internal/parser/markdown.go
static-site-generator/ ├── cmd/ │ └── ssg/ │ └── main.go # Entry point ├── internal/ │ ├── generator/ │ │ └── html.go # HTML generation logic │ ├── parser/ │ │ ├── frontmatter.go # YAML frontmatter parsing │ │ └── markdown.go # Markdown processing │ └── watcher/ │ └── watcher.go # File change detection ├── templates/ │ └── default.html # HTML template ├── content/ # Markdown files └── output/
✨확장된 기능 지원을 통해 마크다운 콘텐츠를 HTML 형식으로 변환합니다.
3. 머리말 파서
머리말 파서는 Markdown 파일에서 제목, 날짜, 태그, 설명과 같은 메타데이터를 추출합니다.
internal/parser/frontmatter.go
go mod init
? Markdown 파일의 콘텐츠와 함께 메타데이터를 추출하고 반환합니다.
4. HTML 생성기
HTML 생성기는 Go의 html/template 패키지를 사용하여 템플릿을 기반으로 정적 HTML 페이지를 생성합니다.
internal/generator/html.go
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
? 템플릿과 구문 분석된 Markdown 콘텐츠에서 HTML 파일을 생성합니다.
5. 파일 감시자
감시자는 콘텐츠/디렉토리의 변경 사항을 모니터링하고 자동으로 재구축을 시작합니다.
https://github.com/fsnotify/fsnotify를 사용하여 빌드되었습니다
내부/watcher/watcher.go
package parser import ( "github.com/gomarkdown/markdown" "github.com/gomarkdown/markdown/parser" ) type MarkdownContent struct { Content string Title string Date string Tags []string HTMLOutput string } func ParseMarkdown(content []byte) *MarkdownContent { extensions := parser.CommonExtensions | parser.AutoHeadingIDs parser := parser.NewWithExtensions(extensions) html := markdown.ToHTML(content, parser, nil) return &MarkdownContent{ Content: string(content), HTMLOutput: string(html), } }
? 파일 변경 사항을 감지하고 정적 파일 재생성을 자동화합니다.
6. 주요 응용 프로그램
진입점은 모든 구성요소를 하나로 연결하고 사용자 정의를 위한 CLI 옵션을 제공합니다.
cmd/ssg/main.go
package parser import ( "bytes" "gopkg.in/yaml.v2" ) type Frontmatter struct { Title string `yaml:"title"` Date string `yaml:"date"` Tags []string `yaml:"tags"` Description string `yaml:"description"` } func ParseFrontmatter(content []byte) (*Frontmatter, []byte, error) { parts := bytes.Split(content, []byte("---")) if len(parts) <hr> <h2> 용법 </h2> <p>앱을 실행하기 전, .md를 사용하여 마크다운 파일을 생성하고 콘텐츠 디렉터리에 저장하세요</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587675397.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"></p> <p>그런 다음 생성기를 실행합니다.<br> </p> <pre class="brush:php;toolbar:false">package generator import ( "html/template" "os" "path/filepath" ) type Generator struct { TemplateDir string OutputDir string } func NewGenerator(templateDir, outputDir string) *Generator { return &Generator{ TemplateDir: templateDir, OutputDir: outputDir, } } func (g *Generator) Generate(data interface{}, outputFile string) error { if err := os.MkdirAll(g.OutputDir, 0755); err != nil { return err } tmpl, err := template.ParseFiles(filepath.Join(g.TemplateDir, "default.html")) if err != nil { return err } out, err := os.Create(filepath.Join(g.OutputDir, outputFile)) if err != nil { return err } defer out.Close() return tmpl.Execute(out, data) }
마크다운 파일을 HTML 파일로 변환하여 출력 디렉터리에 저장합니다
보시다시피 서식을 추가하여 시각적으로 매력적으로 만들어줍니다 :)
변화를 관찰하세요
감시자 활성화:
package watcher import ( "fmt" "github.com/fsnotify/fsnotify" "log" "os" "path/filepath" ) type ProcessFn func() error func Watch(dir string, process ProcessFn) error { watcher, err := fsnotify.NewWatcher() if err != nil { return err } defer watcher.Close() done := make(chan bool) go func() { for { select { case event, ok := <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587820788.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"></p> <hr> <p>그게 바로 그것입니다!</p> <p>이 SSG는 마크다운을 깔끔한 HTML로 변환하고, 변경 사항을 감시하며, 콘텐츠를 체계적으로 정리합니다. 이를 사용하여 무언가를 만들고 싶다면 댓글을 남겨주세요. 여러분이 무엇을 만드는지 보고 싶습니다!</p> <blockquote> <p>이 정보가 도움이 되었나요? 더 많은 Go 튜토리얼을 지원하기 위해 커피를 사주실 수 있습니다! 🔥</p> </blockquote> <p>즐거운 코딩하세요! ?</p><div> <div> <h2> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587555316.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"> 타빈텔 / 정적 사이트 생성기 </h2> <h3> </h3> </div> <div> <div> <div> <h1>정적 사이트 생성기 </h1> </div> <p dir="auto">Go로 작성된 빠르고 간단한 정적 사이트 생성기</p> </div> <br> <br> </div> <br> <div>GitHub에서 보기</div> <br> </div> <br>
위 내용은 Go로 정적 사이트 생성기를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 프로파일 링 활성화, 데이터 수집 및 CPU 및 메모리 문제와 같은 일반적인 병목 현상을 식별하는 등 GO 성능 분석을 위해 PPROF 도구를 사용하는 방법을 설명합니다.

이 기사는 GO에서 단위 테스트 작성, 모범 사례, 조롱 기술 및 효율적인 테스트 관리를위한 도구를 다루는 것에 대해 논의합니다.

보안 통신에 널리 사용되는 오픈 소스 라이브러리로서 OpenSSL은 암호화 알고리즘, 키 및 인증서 관리 기능을 제공합니다. 그러나 역사적 버전에는 알려진 보안 취약점이 있으며 그 중 일부는 매우 유해합니다. 이 기사는 데비안 시스템의 OpenSSL에 대한 일반적인 취약점 및 응답 측정에 중점을 둘 것입니다. DebianopensSL 알려진 취약점 : OpenSSL은 다음과 같은 몇 가지 심각한 취약점을 경험했습니다. 심장 출혈 취약성 (CVE-2014-0160) :이 취약점은 OpenSSL 1.0.1 ~ 1.0.1F 및 1.0.2 ~ 1.0.2 베타 버전에 영향을 미칩니다. 공격자는이 취약점을 사용하여 암호화 키 등을 포함하여 서버에서 무단 읽기 민감한 정보를 사용할 수 있습니다.

이 기사는 단위 테스트를 위해 이동 중에 모의와 스터브를 만드는 것을 보여줍니다. 인터페이스 사용을 강조하고 모의 구현의 예를 제공하며 모의 집중 유지 및 어설 션 라이브러리 사용과 같은 모범 사례에 대해 설명합니다. 기사

이 기사에서는 GO의 제네릭에 대한 사용자 정의 유형 제약 조건을 살펴 봅니다. 인터페이스가 일반 함수에 대한 최소 유형 요구 사항을 정의하여 유형 안전 및 코드 재사성을 향상시키는 방법에 대해 자세히 설명합니다. 이 기사는 또한 한계와 모범 사례에 대해 설명합니다

이 기사는 코드의 런타임 조작, 직렬화, 일반 프로그래밍에 유리한 런타임 조작에 사용되는 GO의 반사 패키지에 대해 설명합니다. 실행 속도가 느리고 메모리 사용이 높아짐, 신중한 사용 및 최고와 같은 성능 비용을 경고합니다.

이 기사는 테스트 케이스 테이블을 사용하여 여러 입력 및 결과로 기능을 테스트하는 방법 인 GO에서 테이블 중심 테스트를 사용하는 것에 대해 설명합니다. 가독성 향상, 중복 감소, 확장 성, 일관성 및 A와 같은 이점을 강조합니다.

이 기사는 추적 도구를 사용하여 GO 응용 프로그램 실행 흐름을 분석합니다. 수동 및 자동 계측 기술, Jaeger, Zipkin 및 OpenTelemetry와 같은 도구 비교 및 효과적인 데이터 시각화를 강조합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Dreamweaver Mac版
시각적 웹 개발 도구
