Nakayaのソロ活動
以前までの経験
Webバックエンド
Go
Python
フロントエンド
Vue
React
Linuxサーバ運用
目次
やったこと
Go言語でブログサーバ開発
PHPで書いていたサーバを書き替えたい
これでWebサーバが書ける
code:go
package main
import (
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"net/http"
)
func main() {
r := chi.NewRouter()
r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello"))
})
http.ListenAndServe(":3000", r)
}
Webサーバのハンドラの定義
code:go
func (h *Handler) UserFeed(w http.ResponseWriter, r *http.Request){}
上記ブログサーバの記事編集画面のテンプレート製作に着手
doc:5 -> HTMLのbodyやheadのテンプレートが展開
h1+ul>(li*5) はこんな感じに:
code:html
<h1></h1>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
gorm用いたSQL操作
検索: select
code:go
var user User //結果を代入するための変数
result := db.Where(&User{
//ここに検索条件を入れる
}).Find(&user)
if result.Error != nil {
// Errorが起きたときにこのへんで対処する
}
XMLの操作
RSSを出力したい
encoding/xmlを使う
code:go
type AtomEntry struct {
XMLName xml.Name xml:"http://www.w3.org/2005/Atom entry"
Title string xml:"http://www.w3.org/2005/Atom title"
Id string xml:"http://www.w3.org/2005/Atom id"
Updated string xml:"http://www.w3.org/2005/Atom updated"
}
以下のXMLに対応する:
code:xml
</entry>
難点
複数の名前空間の取り扱いが難しい……。
http.RequestのBody(io.ReadCloser)からstructに起こすにはUnMarshalerinterfaceを実装する必要がある
単にNewDecoder(io.Reader).Decode(&struct)してやればよさそう
goのテスト
標準出力のテストができるらしい
// Output:に続けて書く(改行もアリ
code:hogehoge.go
package hogehoge
import (
"fmt"
)
func Hogehoge() { //関数名を大文字から始めないとpublicにならない
fmt.Printf("Hello\n")
}
code:hogehoge_test.go
package hogehoge
import (
"testing"
)
func TestHogehoge(t *testing) {
Hogehoge()
// Output:
// Hello
}
javascript
軽いReact hooksの学習
useMemoは関数の結果を保持するためのフックで、何回やっても結果が同じ場合の値などを保存(メモ化)し、そこから値を再取得します。
不要な再計算をスキップすることから、パフォーマンスの向上が期待出来ます。
useCallbackは関数自体をメモ化しますが、useMemoは関数の結果を保持します。
useCallbackはパフォーマンス向上のためのフックで、メモ化したコールバック関数を返します。
微妙に使い分けがわからない……。
ファイルの操作
大きなファイルを取り扱いたい
ブラウザからファイルを操作する
FileオブジェクトとFileReaderオブジェクトを利用
ReadableStream
Browser APIとNode.jsに同名の名前がありややこしい
@types/webと@types/node
非同期処理
code:javascript
function func1() {
return new Promise(function(resolve, reject) {
resolve(); // 成功したら呼び出す
reject(); // 失敗しらた呼び出す
});
}
func1()
.then(() => {
// 成功したら、ここが実行される resolve()の中身はこれ?
})
.catch(() => {
// errorを書く reject()の中身はこれ?
})
func1()
.then(() => {
// okなときの処理
},() => {
// NGなときの処理
)
then()とcatch()をメソッドチェーンで繋げられるけど、順番などに制約はないのか?
Promise は一度エラーが発生すると、最初に ng_callback 関数が指定されるまで、then 処理をスキップします。
TypeScriptで.thenの成功時の処理は(value: unknown) => void, (() => void), な関数が必要らしい
async functionの扱い
Promiseを返す関数を作る
code:javascript
function func1() {
return new Promise(function(resolve, reject) {
resolve(); // 成功したら呼び出す
reject(); // 失敗しらた呼び出す
});
}
awaitの利用
code:javascript
let hogehoge = await hogehoge();
LaravelのDocsの各ページごとに解説を書く
まだ途中