顯示具有 golang 標籤的文章。 顯示所有文章
顯示具有 golang 標籤的文章。 顯示所有文章

2026-05-28

golang 要如何使用 json v2

最近嘗試一下 go1.25 新增的 json v2。不過沒想到一下子就卡關了

我程式如下

package main

import (
	json "encoding/json/v2"
	"log"
)

func main() {
	out, err := json.Marshal(
		struct {
			N  string
			ID string
		}{N: "John"},
	)
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("%s", out)
}

然而,執行 go run {這個 go 檔案}時,卻出現以下錯誤

imports encoding/json/v2: build constraints exclude all Go files in %USERPROFILE%\AppData\Local\go\src\encoding\json\v2

這主要原因是因為 json v2 是個實驗性 package,不在 golang v1 的相容性保證中。

所以需要特殊處理。

2026-01-09

ebiten 在 linux 編譯的坑

我今天有個 golang 專案使用 🦐ebiten

這個專案在 windows 上測試、編譯都好好的。

結果到了 linux 環境就沒法編譯了。

2024-10-18

📝紀錄:Go 語言一些我常需要用到的資訊

Go 各版本的 Windows 支援程度

參閱官方Wiki:《Go for Microsoft Windows

安裝多版本的 Go

參閱官方說明:«Download and install»

首先先執行以下指令

go install golang.org/dl/go{你要的版本}@latest

然後再執行

go{你要的版本}} download

列出所有支援操作系統及架構

指令:

go tool dist list
輸出結果
js/wasm
linux/386
linux/amd64
linux/arm
windows/386
windows/amd64
windows/arm
windows/arm64

可以在後面加上-json 以 JSON格式輸出

加上-json後的輸出結果
[
        {
                "GOOS": "linux",
                "GOARCH": "386",
                "CgoSupported": true,
                "FirstClass": true
        },
        {
                "GOOS": "linux",
                "GOARCH": "amd64",
                "CgoSupported": true,
                "FirstClass": true
        },
        {
                "GOOS": "linux",
                "GOARCH": "arm",
                "CgoSupported": true,
                "FirstClass": true
        },
        
        // 下略……
]

參考自:impluse:《go列出所有支持的系统平台及其架构》

跨平台編譯

參閱官方Wiki:«Building Windows Go programs on Linux»

先設置變數

C:> set GOOS=windows 
C:> set GOARCH=386

然後進行 go build 指令。

如果是 linux 則是

$ GOOS=windows 
$ GOARCH=386
$ go build .

不過 linux 可以簡化成

$ GOOS=windows GOARCH=386 go build .

2024-01-09

Golang 需要不同 Go 版本有不同處理

如果我今天有 go code 需要不同版本有不同處理,要如何寫?

例如說, go 1.18 支援泛型了,但我的 code 要舊版,例如 1.17,也能執行。要如何處理

2023-11-29

2023-07-12

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

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

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

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

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-06-30

GoLang 如何使用自己 localhost 的 module

如果你今天的專案需要引用一個並不在網上,而是自己 localhost 的 module時要如何做?

2022-06-16

Go 的 String()

Go 本身可以用 String() 來做到和 Java 等語言的 toString() 一樣的功效。可我最近在使用 String() 發現一個奇特的陷阱

2021-01-22

Go 中,各種複製 slice 的方法的效能比較

Go 中,與 slice 相關的原生 func 有 func copy(dst, src []Type) intfunc append(slice []Type, elems ...Type) []Type這兩個。

這兩者都能夠用來複製 slice (clone)。

那這樣的話效能呢?