Time of Update: 2017-09-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。if判斷語句if判斷語句的判斷條件不用()包裹,可以在判斷語句裡面初始化判斷條件的值,當判斷語句的聲明變數和局部變數名稱一致時候,執行到判斷語句中假設變數命名是if1時,局部變數的命名if1會隱藏,等到判斷語句執行完再出現func tempIf(a int) {if a > 0 {f.Println("if is true")} else {f.Println("if is false")}}
Time of Update: 2017-09-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。簡介chaincode即使用者鏈碼,它提供了基於區塊鏈分散式總帳的狀態處理邏輯。fabric中,chaincode預設運行在docker容器中。peer通過調用docker api來建立和啟動chaincode容器。chaincode容器啟動後跟peer之間建立gRPC串連,雙方通過發送ChaincodeMessage來進行互動通訊。chaincode容器利用core.chaincode.shim包提供的介面來向Peer發起請求。
Time of Update: 2017-09-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。源碼級剖析Go標準庫中的sync.RWMutex。概述RWMutex,讀寫鎖,又稱“讀寫互斥鎖”。讀寫鎖簡單來說就是可以由任意數量的讀者同時使用,或者只由一個寫者使用的鎖。讀寫鎖和互斥量(Mutex)類似,但是比起互斥量有著更高的並行性,它允許多個讀者同時讀取,因此有一些特殊的應用情境。在並發編程的很多情境下,資料的讀取可能比寫入更加頻繁,這時就要允許多個線程同時讀取一塊內容。用例Go中,RWMutex的零值是一個未加鎖的互斥量。
Time of Update: 2017-09-28
這是一個建立於
Time of Update: 2017-09-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。最近用go語言寫了個 [成都房地產薪酬](http://www.cdhr6.com) 網站,抓取網上的招聘資訊並進行統計。中間遇到一些坑在這裡記錄下來方便以後查閱go在編譯成二進位檔案時並沒有把我們的靜態資源檔案編譯進去,如果我們開發的是web應用的話就需要想辦法把我們的靜態檔案也編譯進去,這裡我們使用 [go-bindata](https://github.com/jteeuwen/go-bindata)
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。有過 JAVA 語言學習經曆的朋友都知道,物件導向主要包括了三個基本特徵:封裝、繼承和多態。封裝,就是指啟動並執行資料和函數綁定在一起,JAVA 中主要是通過 super 指標來完成的;繼承,就是指 class 之間可以相互繼承屬性和函數;多態,主要就是用統一的介面來處理通用的邏輯,每個 class 只需要按照介面實現自己的回呼函數就可以了。 作為集大成者的 Go 語言,自然不會在物件導向上面無所作為。相比較
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。項目中的訊息通知用到了websocket,感覺比http長串連分塊發送好用,特此記錄一下。WebSocket協議用ws表示。此外,還有wss協議,表示加密的WebSocket協議,對應HTTPs協議。完成握手以後,WebSocket協議就在TCP協議之上,開始傳送資料websocket原理及運行機制WebSocket是HTML5下一種新的協議。它實現了瀏覽器與伺服器全雙工系統通訊,能更好的節省伺服器資源和頻寬並達到即時通訊的目的。
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Java8 新特性(一) - Lambda近些日子一直在使用和研究 golang,很長時間沒有關心 java 相關的知識,前些天看到 java9 已經正式發布,意識到自己的 java 知識已經落後很多,心裡莫名焦慮,決定將拉下的知識補上。Lambda 運算式的淵源Java8 作為近年來最重要的更新之一,為開發人員帶來了很多新特性,可能在很多其他語言中早已實現,但來的晚總比不來好。Lambda 運算式就是 Java8
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。安裝gowget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gztar -xvf go1.8.3.linux-amd64.tar.gzmv go /usr/local/mkdir -p /root/golangvim /etc/profileexport GOPATH=/root/golangexport PATH=$PATH:/usr/local/
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1. 安裝在網上看了很多教程,都提到要安裝 protoc 與 protoc-gen-go,但通過嘗試之後並不能正確安裝 protoc,一下記錄能夠順利安裝 protoc 與 protoc-gen-go 的方法。前提是已經預設安裝好了 go。安裝 protoc在該連結下下載protoc-3.3.0-win32.zip的包將檔案解壓到某一檔案夾將解壓出來的檔案夾下的 /bin/protoc.exe 二進位的路徑添加到環境變數中安裝
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。xsec ip database為一個惡意IP和網域名稱庫(Malicious ip database),它擷取惡意IP和網域名稱的方式有以下幾種:通過爬蟲定期拉取網路中公開的惡意ip庫(可能過增加新爬蟲的方式訂閱新的IP庫)支援與自有的其他安全產品聯動(HIDS、WAF、蜜罐、防火牆等產品),即時更新IP庫功能說明啟動後會定期更新ip庫,預設為1小時更新一次支援將惡意ip資訊寫入postgres, sqlite, mysql,
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。需求隊列的特性較為單一,基本操作即初始化、擷取大小、添加元素、移除元素等。最重要的特性就是滿足先進先出。實現接下來還是按照以前的套路,一步一步來分析如何利用Go的文法特性實現Queue這種資料結構。定義首先定義每個節點Node結構體,照例Value的實值型別可以是任意類型,節點的前後指標域指標類型為nodetype node struct {value interface{}prev *nodenext
Time of Update: 2017-09-27
這是一個建立於
Time of Update: 2017-09-30
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。先說原廠模式,原廠模式有3種:簡單原廠模式;Factory 方法模式;抽象原廠模式。go語言中的閉包已經在上一節golang閉包分析中說過了。那麼這兩者有什麼必要的聯絡嗎?假如有這樣一個業務情境,需要我們對不同的字串進行加密。常用的加密方法諸如md5,sha128,sha512等等。現在我們先看看用簡單原廠模式怎麼實現(1)定義一個介面 GetResult(s
Time of Update: 2017-09-30
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。travis ci是一個免費的持續整合平台,當我們在github提交代碼時會觸發travis ci對我們代碼的編譯或者做任何自訂的行為(例如單元測試),一般用以驗證最新提交是否可以正確編譯和測試通過。本次我將bigpipe項目對接到了travis ci,它採用golang語言開發,在README.md中顯示的一個pass表徵圖說明當前代碼成功編譯。travis ci的註冊與對接可以參考一篇部落格:《使用 Travis 自動構建
Time of Update: 2017-09-29
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。不斷的複製粘貼和簡單排列組合的人叫碼農,明白自己編程設計的人叫軟體工程師。瞭解 C語言 的過程式,HTML/css/js 的文檔聲明式,Java/Ruby 的物件導向式,Golang 的組合式和最近看的 Lisp(Scheme)
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。學習 Go 的基礎文法時候,我就看到一些相關部落格,說用 Go 來開發 API 非常簡單友好。隨手 Google 了一下,當時就看到可以用 Beego 架構來開發 API 並且還能結合 Swagger 自動化產生文檔。當時也沒有時間或者沒有響應基礎知識體驗一下,近來時間寬裕了不少。話不多說,跟隨官方文檔來體驗一番。不過官方文檔對於基礎的資料庫知識介紹的一筆帶過啦。資料匯入肯定要在本地安裝、配置好資料庫,寫入資料資訊。我們選擇
Time of Update: 2017-09-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。學習 Go 中的 defer 相關知識疑惑之處以及閉包的概念和用法。Defer 的理解按照官方的解釋,defer 後面的運算式會被放入一個列表中,在當前方法返回的時候,列表中的運算式就會被執行。一個方法中可以在一個或者多個地方使用defer運算式。文檔中一個例子如下:func a() { i := 0 defer fmt.Println(i)// defer fmt.Println(2)// defer
Time of Update: 2017-09-26
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 在之前的一個系列的文章裡,我們從基本原理開始,一步步實現了基於 Vector Trie 的持久化 List 資料結構。接下來將要研究的是使用 HAMT 這一資料結構實現持久化 Hash Table。持久化資料結構簡介 這篇文章裡,我們對比各種可以用來實現持久化資料結構的方案,詳細介紹了 Vector Trie 這種資料結構,說明了用它實現 List 優勢。HAMT 的全稱是 Hash Array Mapped
Time of Update: 2017-09-26
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 函數式編程模型因其天生對並發具備良好的支援,近些年來越來越受到重視。從這篇文章開始,我將以一個系列的部落格來記錄函數式編程的一個重要組件:持久化資料結構在 Go 語言下的實現。這篇文章是系列文章的一部分,如果還沒有瀏覽過文章的其它部分請參考:持久化資料結構簡介 (本文)Vector Trie 的實現Transient 及持久化 函數式編程不是新概念,像 Haskell、Clojure、Scala