正在讀 Golang 的 net/http 原始碼,發現 Golang 標準庫中常常看到一個寫法,例如
func (c *Client) Do (req *Request) (Response, error) {
  return c.do(req)
}

unc (c *Client) Do (req *Request) (Response, error) {
  // do something here......
}

這個寫法看起來很多餘,問 ChatGPT 他說方便測試、提昇封裝性之類的理由,但是都沒有說服我。直到我看到了這段,在 roundtrip.go 中
func (t *Transport) RoundTrip(req *Request) (*Response, error) {
  return t.roundTrip(req)
}

RoundTrip 呼叫了 roundTrip,有趣的是這個檔案有個編譯器設定
//go:build !js

這個只在非 wasm 環境使用,當編譯目標是 wasm 時,就會去另一個檔案 roundtrip_js.go 用另一個函式。
看到這裡我才知道,一個 public function 什麼都不做只呼叫一個 private function 的用意是編譯時可以用不同檔案,而且不破壞函數呼叫的形式。
 
 
Back to Top