정적 사이트 생성기는 가볍고 빠르며 확장 가능한 웹사이트 생성을 단순화하는 강력한 도구입니다. 블로그, 문서 또는 소규모 비즈니스 사이트를 구축하는 경우 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

GO 프로그래밍에서 오류를 효과적으로 관리하는 방법은 다음과 같습니다. 1) 예외 대신 오류 값 사용, 2) 오류 랩핑 기술 사용, 3) 사용자 지정 오류 유형 정의, 4) 성능에 대한 오류 값 재사용, 5) 경고와 함께 공황 및 복구 사용, 6) 오류 처리 전략을 기록하고, 오류 처리, 8) 오류를 사용하여 오류가 발생합니다. 이러한 관행과 패턴은보다 강력하고 유지 관리 가능하며 효율적인 코드를 작성하는 데 도움이됩니다.

GOROONE 및 채널을 사용하여 동시성을 구현할 수 있습니다. 1) Goroutines를 사용하여 예를 들어 음악을 즐기고 친구를 동시에 관찰하는 등의 작업을 병렬로 수행하십시오. 2) 생산자 및 소비자 모델과 같은 채널을 통해 고 루틴간에 데이터를 안전하게 전송합니다. 3) Goroutines와 교착 상태의 과도한 사용을 피하고 동시 프로그램을 최적화하기 위해 시스템을 합리적으로 설계하십시오.

GOOFFERSMULTIPLEAPLEACHELINDINGCURRENTDATDATDATDATRUCTRUCES (MUTEXES, 채널, 및 및 원자가 포함

go'serrorhandlingsexplicit, treatingerrorserSreturnEdValuesratherthanexceptions, 1) Go'sportroachensureserorawarensessbutcanleadtoverbosecode.2) pythonandjavauseexeceptionsforcleanercodebutmiserrors.3) go'smethodoTodoTand

WhentestinggocodewithInitFunctions, useExplicitSetUpFunctionsOrsParateTestOvoiddenceNInItfictionSideffects.1) useExplicitSetUpFunctoControlGlobalVariableInitialization.2) CreateSeparateTesteSpilestobySinitFunctions 및 testesten

go'serrorhandlingreturnserrorsvalues whithuseexceptions와 달리 1) Go'sMethodensuresexpliciterRorhandling, promotingrobustcodebutincreasingverbosity.2) Javaandthon'sexextionslowercodebutcodebutcodebutcanlederforlortorifneterfortorifneteriflerortorifnetrorirederiflofertorifneateRoferfortoriflogertoflortoflerortofneateRofer

AneffectiveInterfaceingoisminimal, Clear, and Promotesloosecoupling.1) Minimizetheinterfaceforflexibilityandeasofimplementation.2) usicfacesforabStractionToswapimementationswhangingCallingCode.3) DesignStabilitySUsingInterfacestomockDep

중앙 집중식 오류 처리는 GO 언어에서 코드의 가독성과 유지 가능성을 향상시킬 수 있습니다. 구현 방법 및 장점에는 다음이 포함됩니다. 1. 비즈니스 로직에서 별도의 오류 처리 로직 및 코드를 단순화합니다. 2. 중앙 처리로 오류 처리의 일관성을 확인하십시오. 3. 연기 및 복구를 사용하여 공황을 포착하고 처리하여 프로그램 견고성을 향상시킵니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

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

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기