原创 Go語言:讀取帶有BOM頭的UTF8文件

 BOM頭是UTF8文件開頭的三個固定取值的字節,讀文件的時候如果遇到BOM頭需要忽略。在Golang裏,比較有效率的方法是用ioutil.ReadFile,返回[]byte之後截取從第四個字節到末尾的切片。因爲由切片截取生成的新切片和原

原创 Nodejs: net.isIP()使用示例及對常見IP字符串的驗證

net.isIP(input)使用示例及對常見IP字符串的驗證如下,net.isIPv4,net.isIPv6兩個函數的用法和net.isIP一樣,只是返回變成true/false。 > var net = require('net')

原创 Go語言:IPv6解析轉換成BigInt整形以及與IPv4的兼容

IPv6協議文檔是RFC4291,128bit(16個字節),以冒號分隔,允許用雙冒號"::"來壓縮表示一串連續的0,但"::"只能使用一次。 "0:0:0:0:0:ffff:0:0" -- "0:0:0:0:0:ffff:255.255

原创 Nodejs IpV6解析轉換成BigInteger超大整形

IpV6的解析與轉換目前最方便的做法是使用第三方包ip-address將IPv6轉換成jsbn.BigInteger。經測試,在nodejs 4.6,8.16,10.4等三個版本上都能正常使用。 npm install ip-addr

原创 Go學習:切片slice的循環機制及性能

使用range來循環切片時,每一輪都會向同一個臨時變量進行賦值即賦值拷貝,這是一個性能上的開銷。從下面的測試輸出能看得出臨時變量的地址是不會變的,而且與切片的地址完全不同。如果切片元素包含字符串的話,用range遍歷和直接尋址遍歷的性能差

原创 Go語言:append函數源碼學習及切片深度拷貝問題

調用append函數時,當原有長度加上新追加的長度如果超過容量則會新建一個數組,新舊切片會指向不同的數組;如果沒有超過容量則在原有數組上追加元素,新舊切片會指向相同的數組,這時對其中一個切片的修改會同時影響到另一個切片。其僞代碼在如下文件

原创 Go語言:幾種深度拷貝(deepcopy)方法的性能對比

Go語言中所有賦值操作都是值傳遞,如果結構中不含指針,則直接賦值就是深度拷貝;如果結構中含有指針(包括自定義指針,以及切片,map等使用了指針的內置類型),則數據源和拷貝之間對應指針會共同指向同一塊內存,這時深度拷貝需要特別處理。目前,有

原创 Go語言:zkutils模塊實現對zookeeper節點的無限循環監聽

zookeeper(zk)有兩個重要的應用場景,一是用於服務的註冊與監聽,服務消費方需要保持對服務節點列表的持續監聽;二是用於集羣的集中配置中心,應用服務如果需要支持動態可配的話則需要保持對節點內容的持續監聽。 zkutils是面向go-

原创 Go語言:zookeeper客戶端可選參數配置

 go-zookeeper有3個比較常用的可選參數,分別控制日誌輸出和事件回調: //是否輸出日誌 func WithLogInfo(logInfo bool) connOption //定製日誌輸出 func WithLogger(l

原创 Go學習:字符轉字符串

Golang沒有專門的字符類型,用int32來存儲UTF-8字符,int32有一個別名叫做rune,用單引號聲明的字符默認類型爲rune。 在需要字符串的地方,rune不能直接使用而是要先用轉成字符串,不像JAVA裏“abc” + 'd'

原创 Go語言: 谷歌的go-redis模塊按指定pattern獲取 keys

API: func (c Client) Keys(pattern string) *StringSliceCmd 示例: package main import ( "fmt" "github.com/go-redis/red

原创 Go語言:stmp 郵件 真實發送地址和宣稱的發件人地址不一致 (foxmail: on behalf of)

以騰訊QQ企業郵箱來做系統報警郵件的收發,用Go來做郵件發送的客戶端。郵件能正常發送和接收但是QQ郵箱上有個系統提示“真實發送地址和宣稱的發件人地址不一致”,在foxmail客戶端表現的是類似於 "pengpengzhou on beha

原创 Go語言:谷歌google的uuid模塊對uuid各個版本的實現(version 1,version 2,version 3,verison 4,version 5)

相關文章: 《Go語言:谷歌google的uuid模塊的基本用法》 uuid是谷歌開發的生成16字節UUID的模塊,實現了RFC4122;對UUID的v1,v2,v3,v4,v5等各個版本都有實現。使用方法示例如下: package m

原创 Go語言:谷歌的go-redis模塊面向redis cluster集羣的客戶端參數配置

版權所有,請勿轉載。 谷歌的go-redis模塊對redis cluster集羣提供了支持,通過:func NewClusterClient(opt *ClusterOptions) *ClusterClient函數可以得到一個面向red

原创 Go學習:Mongo客戶端報錯cannot transform type bson.D to a BSON Document: WriteArray can only write a Array

網上有些文章給的示例直接傳bson.D,可能是客戶端版本問題,在[email protected]上Find方法要求傳入type M map[string]interface{},直接傳bson.D會報如下錯誤: “cannot