Go Package - goquery
本篇文章說明 goquery 的部分函式,goquery 是 html parser
Installation1go get github.com/PuerkitoBio/goquery
html example1234567891011html := `<div class="title"> Example</div><div class="content"> <p>Hello goquery</p></div><div class="other"> Other</div>`
string 轉換 goquery.Document1doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
goquery.Document.Find12doc, _ := goquery.NewDocumentFromReader(strings.NewReader ...
Go HTTP Request
本篇文章說明 Http Request 的部分,並將資料讀取成 byte[],後續要轉成 string 或 JSON 都比較方便,使用兩個 package 的部分函式,io/ioutil 和 net/http
Http.Get12345resp, err := http.Get("http://example.com/")if err != nil { // handle error}defer resp.Body.Close()
io.ReadAll1body, err := io.ReadAll(resp.Body)
Go JSON 處理
本篇文章說明 encoding/json 部分函式,JSON 和 byte[] 轉換,還有透過 map 只轉換特定屬性
Official Document
struct 轉換 JSON (Marshal)1func Marshal(v any) ([]byte, error)
1234567891011type Person struct { ID int Name string}person := Person{ ID: 1, Name: "Bob",}jsonBlob, _ := json.Marshal(person)os.Stdout.Write(jsonBlob) // {"ID":1,"Name":"Bob"}
JSON 轉換 struct (Unmarshal)1func Unmarshal(data []byte, v any) error
123456789type ...
Go 字串處理
本篇文章說明兩個 package 的部分函式,strings package 和 strconv package
strings packageOfficial Document
ToUpper123func ToUpper(s string) stringstrings.ToUpper("Gopher") // GOPHER
ToLower123func ToLower(s string) stringstrings.ToLower("Gopher") // gopher
Replace1234func Replace(s, old, new string, n int) stringstrings.Replace("oink oink oink", "k", "ky", 2) // oinky oinky oinkstrings.Replace("oink oink oink", "oink", "moo", ...
Javascript Promise 執行順序
本篇文章主要討論 javascript 的非同步程式設計,Promise 是什麼和 Promise 執行順序
Javascript 基礎觀念Javascript 主要執行緒 (Main Thread)Main thread 是瀏覽器處理事件和繪製畫面的執行緒,預設情況下,瀏覽器只使用「一個執行緒」執行所有 Javascript。所以「長運行時間的函式」會阻塞執行緒,導致事件處理或繪製畫面的延遲,影響使用者體驗。
除非使用 Web Worker,否則瀏覽器只會在主要執行緒上運行
分析長運行時間的函式
CPU Bound: 運行函式的大部份時間都是計算、邏輯判斷等,需要使用大量 CPU 資源的指令
I/O Bound: 運行函式的大部份時間等待鍵盤、滑鼠、硬碟、網路等事件觸發,不需要使用大量 CPU 資源的指令
處理長運行時間的函式
CPU Bound: 使用 Web Worker 方式增加執行緒,進行平行運算
I/O Bound: 使用非同步的 API
Javascript 非同步程式設計非同步程式設計在 javascript 中非同步的函式 (參考資料):
...
Javascript 非同步的發展
本篇文章會介紹 javascript 的非同步程式設計發展,從最初的 Callback 技術,到 2015 年的 Promise (ES6),到 2017年的 async/await (ES8)。
如果你還沒有理解非同步程式設計,可以參考同步、非同步和非同步的 JavaScript 介紹
一個貫穿全文的例子
同步程式設計逛夜市
Callback 逛夜市
Promise 逛夜市
Promise.all 逛夜市
async/await 逛夜市
比較各個方法
總結
參考資料
一個貫穿全文的例子有一天你去逛夜市,逛夜市一定要買雞排和珍奶
1234567class Food { name = '雞排'}class Drink { name = '珍奶'}
而且雞排和珍奶都到手你才會開動,換句話說當你買完雞排你不會先吃掉,一定會等到珍奶也買好。
123function eat(food, drink) { // 開動 console.log(food.name, drink.n ...
Go 單元測試套件 testify
本篇文章主要介紹 Go 語言 testify 套件進行單元測試
建立主程式
建立測試
建立主程式
建立一個專案 「Project」,在路徑 D:/Workspace/Go 執行 go mod init Project,建立後路徑如下
12Go└─ go.mod
建立 sum.go 填入以下內容
12345package mainfunc Sum(a int, b int) int { return a + b}
建立 main.go 填入以下內容
123456789package mainimport ( "fmt")func main() { fmt.Println(Sum(5, 7))}
編譯程式碼
12# From within D:/Workspace/Gogo build .
執行程式碼
12# From within D:/Workspace/GoProject.exe
最後路徑如下
12345Go├─ go.mod├─ main.go├─ Project.exe└─ s ...
Typescript ES6 環境安裝 Jest
本篇文章主要介紹 Jest 測試框架,並應用在 ES6 語法進行 import,且不使用 Babel 編譯
建立主程式
建立測試
自動重新執行測試
建立主程式
建立一個專案 「Project」,在路徑 D:/Workspace/TS 建立一個資料夾 Project,建立後路徑如下
12TS└─ Project
建立 sum.ts 填入以下內容
123export function sum(a: number, b: number): number { return a + b}
建立 main.ts 填入以下內容
123import { sum } from './sum'console.log(sum(5, 7))
安裝 typescript
12# From within D:/Workspace/TS/Projectnpm install typescript --save-dev
安裝 ts-node,免編譯執行 ts 檔案
12# From within D:/Workspace/TS/Pro ...
在沒有 Babel 的 Javascript ES6 環境安裝 Jest
本篇文章主要介紹 Jest 測試框架,並應用在 ES6 語法進行 import,且不使用 Babel 編譯
建立主程式
建立測試
自動重新執行測試
建立主程式
建立一個專案 「Project」,在路徑 D:/Workspace/JS 建立一個資料夾 Project,建立後路徑如下
12JS└─ Project
建立 sum.js 填入以下內容
123export function sum(a, b) { return a + b}
建立 main.js 填入以下內容
123import { sum } from './sum.js'console.log(sum(5, 7))
建立 package.json 填入以下內容
123{ "type": "module"}
執行 main 確認可正常運行
12# From within D:/Workspace/JS/Projectnode ./main.js
最後路徑如下
12345JS└─ ...
Node.js 和 npm 簡介
本篇文章主要介紹 Node.js、npm 和一些 npm 的套件
什麼是 Node.js
Node.js 和 npm 是什麼關係
常見 npm 套件
Babel
Typescript
Jest / TS-Jest
nodemon
ts-node
為什麼有些套件有 @ 綴詞
什麼是 Node.jsNode.js 是一款 JavaScript 執行環境的軟體,讓編寫 Javascript 後,可以在瀏覽器以外的地方執行,透過 Command Line 執行 Javascript。他的運行引擎基於 Chrome V8,可以想像成用 Command Line 啟動瀏覽器運行 Javascript 的環境。Node.js 被設計來打造可擴充的網路應用程式,可以視為在伺服器端運行 JavaScript,更多詳細內容可參考官方網站或是維基百科。
Node.js 和 npm 是什麼關係提到 Node.js 時常會伴隨著 npm,npm 是 Node.js 預設的套件管理工具,其他 Node.js 的套件管理工具還有 yard。npm 的完整名稱是 Node Package Manag ...