2023-07-12

紀錄一下 Go 的 struct field tag 的處理

struct field tag 指的是如下 struct 中的 `json:"id"` 這段字串

struct {
	Id uint `json:"id"`
}

最常使用到的情況就是 Standard library 的 xmljson library 了吧。

2023-06-29

如何用 npx 來使用不同版本的 npm

以下是一個簡單的 package.json

{
	"name": "Lorem ipsum dolor sit amet",
	"version": "1.0.0",
	"description": "Ac odio tempor orci dapibus.",
	"main": "index.js",
	"scripts": {
		"start": "webpack",
		"dev": "webpack-dev-server --open"
	},
	"engines": {
		"node": "v8.6.0"
	}
}

如果我的 Node.js 是最新版,那就無法執行該專案了。

2023-01-11

紀錄:Go 如何將 SVG 轉成 image.Image

因為在 Go 中,圖片是靠 image package 來處理的。

而在原生 library 中,並沒有針對 svg 的處理。


我在網路上有找到相關 library ,特此紀錄。


2022-12-05

golang 的 init()

之前就很好奇,像是 github.com/go-sql-driver/mysql 到底是如何做到只需寫以下幾行,就能夠連線 mysql

import (
	"database/sql"

	_ "github.com/go-sql-driver/mysql"
)

// ...

db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306/my-db)")

2022-11-25

Golang slice 研究筆記

以前有研究過 Go silce 的指針,後來看了一些文章,才知道說 Go 本身在底層還有一個 array 來處理 slice。


簡單說,我今天建立一個 slice,實際上同時建立了一個 array

而array 實際上就是個指針


所以執行以下 code 會 print 出同樣的值


arr1 := []int{1, 2, 3}
arr2 := arr1

fmt.Printf("%p\n", &arr1[2])
fmt.Printf("%p\n", &arr2[2])

換言之,arr1[1] = 10 同時會更改到 arr2[1],因為兩者底層的 array 是同一個。

2022-11-02

Shell script 在執行程式時,遇到詢問時,如何自動回應

某些程式在執行的過程中,會進行詢問,舉例來說:

$ some-program 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi mattis velit purus, et bibendum neque dapibus ut. Aliquam erat volutpat. Sed vulputate fermentum eros eu consequat. Vivamus in tellus sit amet dui fringilla tempor sed in lectus. Vestibulum dapibus justo elit, imperdiet vehicula nisi varius id. Nulla posuere ante eu augue commodo ultricies. Nulla nec mauris elit. Donec dolor dolor, interdum eget eleifend ac, rhoncus sit amet libero. Proin ullamcorper luctus libero, id porta tellus ultricies venenatis. Nunc lobortis vulputate diam, in dictum libero scelerisque eget. In et est nulla. Integer venenatis vitae ligula ac faucibus.

----------

Accept? (y/N):

詢問你是否同意,如果同意才能繼續進行。


如果我只是自己開終端機執行也就算了,鍵盤輸入 y 就好,但如果是寫 shell script 就不一樣了