##雜七雜八感言:

最近工作都在弄Go的Server,應該之後會把心得整理一下. 發現用Go 來處理網路的相關封包,其實相當的方便又好用啊.

##筆記:

###[Golang] 一些有趣的package 跟 網站

###[Golang] 關於JSONRPC 心得筆記

利用JSONRPC package 可以很快速地建立一個JSON RPC Server/Client架構. 這裏有一個簡單的example可以參考,主要要注意的事情如下:

  • API為兩個參數,一個Input 一個Output.還有回傳值err. 要注意, Output使用point,相關的數值處理小心忘記指標與數值的關係.
  • 由於使用JSON,在Client這邊的回傳值個數可以多或是少. 不會影響結果,只要注意操作就好.
  • 如果error 不為空的時候,千萬注意 output會被清掉. 這個是經過很多次失敗後,跑回去看src才知道是故意的.

Refer Golang pkg source /net/rpc/jsonrpc/server.go

  
  resp := serverResponse{Id: b}
  if r.Error == "" {
  // 只有在 Error == nil 才會傳Return 的Interface..
 	resp.Result = x
  } else {
  	resp.Error = r.Error
  }
  return c.enc.Encode(resp)

###[Golang] 關於Go init()

看到有人提到的有趣部分,也發現自己沒有那麼注意到這一塊. 主要問題來自於這個stack overflow

defined in its source. A package-scope or file-scope identifier with name init may only be declared to be a function with this signature. Multiple such functions may be defined, even within a single source file; they execute in unspecified order.

簡單的來說, func init()在一個檔案裡面會最早被呼叫到.但是不僅僅可以存在唯一個,他可以存在多數個的,並且正常運作. 而呼叫的順序會依照line order來排序,在前面的會先跑到.

  
package main

import "fmt"

func init() {
	fmt.Println("Run first")
}

func init() {
	fmt.Println("Run second")
}

func main() {

	fmt.Println("Hello, playground")
	
}

Go Plau is here


Evan

Attitude is everything