このブログ開発の簡単な概要を共有する

このブログ開発の簡単な概要を共有する

ネットで共有してください。

最后更新 2022/10/10 9:41
沙漠尽头的狼
预计阅读 7 分钟
分类
その他の言語
标签
Go

こんにちは、私は砂漠の果ての狼です。

本文写作由来

站长用Go写的这版博客前台代码比较原生,既没用什么框架,本来想着后面重构后再详细写写分享的,今天群友提了,就简单写写吧。

在线访问地址:https://go.dotnet9.com

フロントページのスクリーンショット

この記事は非常に簡単ですが、リストを作成します:

  1. Go基礎学習
  2. ブログを作成する。
  3. ブログのソースコード。
  4. 後の計画。

1. Go基礎学習

  • Go中文文档:https://go.p2hp.com/doc/
  • Go webプログラミング:Qグループ(77199230 0)にPDFファイルがあります

上記のURLとPDFは、Goの基本的な構文の基礎と統合に適しています。PDFファイルは、Jingdongが販売する“Go Webプログラミング”([シンガポール]鄭Zhaoxiong)の本ではない必要がありますが、また、非常に良い、ウェブの基本の多くを説明し、オンラインのビッグマスターの要約である必要があります、読む価値があります、以下はPDFディレクトリです:

Go web PDF

上記の基本情報は、囲碁に触れていない学生にお勧めします。

2. ブログを作成する。

再構築されたブログフォアグラウンドテンプレートとGoバージョンの学習教材のソース:

  • B站Up主【码神之路】B站首页:https://space.bilibili.com/473844125

  • チュートリアルタイトル:“神の道”ネイティブGo言語ブログの実戦チュートリアル、練習レベルのプロジェクト実戦チュートリアル、フレームワークを使用せず、わかりやすく、10年のメーカーのプログラマーの説明

  • 视频链接:https://www.bilibili.com/video/BV1VS4y1F7NM

ビデオカタログは以下の通り。

码神之路B站视频教程目录

ビデオに添付されたブログ記事:

码神之路个人博客

ビデオは学習、実践的な実践に適しており、アップメインサポートブログはコードが正しいかどうかを確認するのに適しており、ブログサポートフロントエンドテンプレートはアップメイングループ(グループ番号[7188 4 0 650])で共有されており、ウェブマスターコードリポジトリもアップロードされていますが、アップメインの変更とは異なり、いくつかのパーソナライズされた変更は以下のとおりです。

  • ウェブマスターはフロント記事の編集を追加しなかった:Dotnet9ウェブサイトにはバックグラウンド記事管理機能があり、機能が重複しています。
  • ORMの選択は異なります:ウェブマスターはGORMを選択します。
  • 記事検索ウェブマスターが直接呼び出すDotnet9ウェブサイトのバックエンドインターフェイスは、Goではインターフェイス実装を再記述していません。Web APIとフロントオフィスの責任は明確であり、Razor Pagesブログのフロントオフィスも同じ記事検索インターフェイスを使用しているなど、他のクライアントインターフェイスも共有しています。
  • その他のもの。

3. ブログのソースコード。

如B站Up主【码神之路】视频教程标题所说“原生Go语言博客实战教程,练手级项目实战教程,未使用任何框架,通俗易懂”,重点是原生,站长实践后发现Up主的路由相关写法与 ASP.NET CoreMinimal APIs(最小API)相像,当然前者主要是写Web(MVC),后者是写Web API,实践中与自己熟悉的技术比较学习能加深理解,下面对Go版博客源码进行部分简单介绍。

3.1入り口。

main.go为程序入口文件,相当于 ASP.NET CoreProgram.cs文件,文件名可以修改,只要代码第一行为package main

コードは以下の通り。

package main

import (
	"log"
	"net/http"
	"dotnet9.com/goweb/common"
	"dotnet9.com/goweb/router"
)

func init() {
	// 模板加载:html文件,比如首页文章列表、分类文章列表、页头、页尾等
	common.LoadTemplate()
}

func main() {
	server := http.Server{
		Addr: "127.0.0.1:8080",
	}
	router.Router()
	if err := server.ListenAndServe(); err != nil {
		log.Fatal(err)
	}
}

服务绑定IP与端口是写死的,可写到配置文件,你就说和如下 ASP.NET Core 最小API像不像吧:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run("http://localhost:3000");

router.Router()是简单封装的路由(封装如下),和上面最小APIapp.MapGet("/", () => "Hello World!");像几分,能给到8分不?:

goの簡単なルーティングカプセル化 ** router.go **

package router

import (
	"net/http"
	"dotnet9.com/goweb/views"
	"dotnet9.com/goweb/api"
)

func Router() {
	http.HandleFunc("/", views.HTML.Index)
	http.HandleFunc("/c/", views.HTML.Category)
	http.HandleFunc("/p/", views.HTML.Detail)
	http.HandleFunc("/login", views.HTML.Login)
	http.HandleFunc("/api/v1/post", api.API.SaveAndUpdatePost)
	http.Handle("/resource/", http.StripPrefix("/resource/", http.FileServer(http.Dir("public/resource/"))))
}

フロントページコードは以下の通り。

./views/index.go

package views

import (
	"errors"
	"log"
	"net/http"
	"strconv"
	"dotnet9.com/goweb/common"
	"dotnet9.com/goweb/service"
)

func (*HTMLApi) Index(w http.ResponseWriter, r *http.Request) {
	// 这里是业务代码,读取文章列表,绑定模板
}

3.テンプレート結合

ormなどの使用をスキップして、テンプレートバインディングについて話します:

これはGoの記事一覧テンプレートです:**./ template/layout/post-list.html **

{{define "post-list"}}
<ul class="post-box">
  {{range $index, $elem := .Posts}}
  <li class="post-label">
    <a href="/p/{{$elem.Slug}}"><h2>{{$elem.Title}}</h2></a>
    <p>{{$elem.Description}}</p>
    <div class="post-action">
      <span>
        <i class="iconfont icon-yonghu"></i>
        &nbsp; {{$elem.Original}}
      </span>
      <span>
        <i class="iconfont icon-wenjianjia"></i>
        {{range $catIndex, $cat := $elem.Categories}}
        &nbsp;<a href="/c/{{$cat.Slug}}">{{$cat.Name}}</a>
        {{end}}
      </span>
      <span>
        <i class="iconfont icon-riqi"></i>
        &nbsp;{{$elem.CreationTime}}
      </span>
      <span>
        <i class="iconfont icon-yanjing"></i>
        &nbsp;{{$elem.ViewCount}}
      </span>
    </div>
  </li>
  {{end}}
</ul>
{{end}}

对比这是Razor Pages文章列表模板绑定:

@page
@inject IOptionsSnapshot<SiteOptions> SiteOptions
@using Dotnet9.Web.ViewModel.Commons
@model IndexModel
@{
    ViewData["Title"] = "首页";
}

<ul class="post-box">
    @if (Model.BlogPosts?.Any() == false)
    {
        <span>没有数据哦</span>
    }
    else
    {
        @foreach (var blogPost in Model.BlogPosts!)
        {
            <li class="post-label">
                <a href="@blogPost.CreationTime.ToString("/yyyy/dd")/@blogPost.Slug">
                    <h2>@blogPost.Title</h2>
                </a>
                <p>@blogPost.Description</p>
                <div class="post-action">
                    <span>
                        <i class="iconfont icon-yonghu"></i>
                        &nbsp; @(blogPost.Original.IsNullOrWhiteSpace() ? SiteOptions.Value.Owner : blogPost.Original)
                    </span>
                    <span>
                        <i class="iconfont icon-wenjianjia"></i>
                        &nbsp;
                        @foreach (var cat in blogPost.Categories)
                        {
                            <a href="/cat/@cat.Slug" title="@cat.Description">@cat.Name</a>
                        }
                    </span>
                    <span>
                        <i class="iconfont icon-riqi"></i>
                        &nbsp;@blogPost.CreationTime.ToString("yyyy-MM-dd")
                    </span>
                    <span>
                        <i class="iconfont icon-yanjing"></i>
                        &nbsp;@blogPost.ViewCount
                    </span>
                </div>
            </li>
        }
    }
</ul>

@await Html.PartialAsync("_PaginationPartial", new PaginationModel(Model.Current, Model.Pages, Model.Total, Model.PageSize, Model.PageCount))

コードはおそらく:

  • Go模板绑定使用{{.对象字段}},注意前面的点
  • Razor语法绑定使用@Model.对象

言語は似ており、テクノロジースタックに精通しており、他のテクノロジースタックはバイパスすることができます。

n +1コメント

评论对接的第三接口Valine,后面考虑自己开发:

Valine-高速で簡潔で効率的なバックエンドレビューなしのシステム。

** 性格 **

  • 速い。
  • 安全性は
  • Emoji 😉
  • バックエンド実装なし
  • MarkDownのフル構文サポート
  • 軽量で使いやすい
  • 記事の読解力統計v 1.2.0 +

ウェブサイトの使用例:

Valineのバックグラウンド管理:

4. 後の計画。

囲碁や新しいテクノロジーを学ぶことは、学ぶだけではなく、それを使う機会を見つける必要があります。Goを使って興味のあるプロジェクトを試してみてください。例えば、簡単なブログのフロントエンドを開発するなど、もっとやる気があります。最初はネイティブ開発を試してみてください。フレームワークを使わずに、言語の基本的な構文を理解するのに役立ちます。

当想快速进行业务开发、迭代时,可以考虑框架了,站长最近有关注 goframe

GoFrameは、モジュール式で高性能なエンタープライズグレードのGoベース開発フレームワークです。GoFrameは、汎用性のある基本開発フレームワークであり、基本開発コンポーネントの共通コアを含むGolang標準ライブラリの拡張拡張レベルであり、利点は、実用的な、モジュール化、包括的なドキュメント、豊富なモジュール、高使いやすさ、汎用性、チーム指向です。Golangを使用して、小規模から中規模のビジネスプロジェクトを開発したい場合は、GoFrameはあなたのための完璧な選択です。Golangコンポーネントライブラリを開発したい場合は、GoFrameが提供する豊富で強力な基本コンポーネントライブラリは、作業をより効率的にするのに役立ちます。チームリーダーであれば、GoFrameの豊富なドキュメント、詳細なコードコメント、活発なコミュニティメンバーは、メンタリングコストを大幅に削減し、迅速なアクセス、言語変換、能力向上をサポートします。

GoFrameの公式ドキュメントhttps//goframe.org/pages/viewpage.action? pageId= 11 1 4 1 19

后面就用goframe重构这版go博客吧,当然前提是先把Razor Pages版本博客开发完善了,包括后台...

水文学の終わり(2時間かかった)限り、学習する時間を費やすつもりは、何も学ばない、単語に従わない:全体。

Keep Exploring

延伸阅读

更多文章
同标签 2024/11/06

なぜ私のブログはBlazorに戻るのか?

ブログサイトの開発は苦労し、MVC、Vue、Goなどの10近くのバージョンを試してきましたが、Blazorに戻り、静的SSRを使用して、速度が急上昇し、正常にオンラインになりました。

继续阅读