Time of Update: 2018-08-19
說不清楚的閉包 閉包的概念大家都聽說過,但是往往解釋的越多,越說不明白。今天我用GoLang的課後斐波那契數列的練習題來秒說明一下閉包的套路。記住:一切都是套路。 斐波那契數列 斐波那契數列是一種數列,它的規律是數列中某一個位置的數字是該位置的前兩個位置的數字之和。 比如,指定兩個起始數字,比如0和1,那麼斐波那契數列就會像這樣:0, 1, 1, 2, 3, 5, 8, 13。。。 先上代碼 package mainimport "fmt"//
Time of Update: 2018-08-19
前陣子安裝過,今天要再次安裝,開啟GitHub的項目卻忘記了,所以寫這筆記,記錄過程,同時也方便其他想安裝的人。 先在github上搜尋Ethereum,找到這個go-Ethereum版本的。 這時候看到很多檔案,其中有一個README.md,開啟後看到下面的資訊: 提示我們安裝這個軟體需要先安裝Go,版本在1.7或以上。安裝完Go再下載這個項目,解壓執行下面的命令即可。
Time of Update: 2018-08-20
Toolkit類中的工具方法 package org.sl.util;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.security.MessageDigest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Random;public class
Time of Update: 2018-08-20
這個項目需要用到動態連結程式庫技術, 主程式動態載入一些功能模組,這樣在擴充功能時,無須修改主程式,只需要新增功能模組動態調用就可以了。 研究了一下golang官方支援的plugin功能,發現有幾點不足。 1.官方plugin功能本質上是用cgo實現的,編譯一個so檔案,然後再調用 2. 只支援linux, 不支援windows 3. plugin模組panic時, 主程式也會panic, 無法做到隔離。
Time of Update: 2018-08-20
一般來說,記憶體池都是採用預分配的方式,分為固定大小的和非固定大小塊,固定大小的記憶體效率高,非固定大小靈活。同時,分為單線程和多線程版的,單線程不需要考慮並發問題。 一般記憶體池的實現思想:分配一塊比較大多記憶體,把這塊記憶體分成大小相等的塊,即固定大小,第一塊要儲存必要的資訊,比如nfirst(第一塊可分配到塊),nsize(共分配了多少),nfree(可分配塊大小),pnext(若是記憶體池不夠,分配一塊growth,pnext指向下一塊),p(儲存第一可分配記憶體塊的地址),同時還需要p
Time of Update: 2018-08-19
golang是特別不適合拿來做應用程式層可靠協議開發的語言。所有的可靠協議都依賴於串連狀態,在講究並發的情境下,所有的狀態都依賴於事件,所有的事件都依賴於核心檔案描述符,問題是,在可靠情境下,我們常常需要將一個連接埠用作一塊網卡,一塊網卡可以有65536個描述符並發處理事件,一個連接埠卻只有一個描述符,這一個描述符需要類比出65536個描述符的事件處理效能,這本來就是令人頭大的問題。golang本身的協程機制----固然golang和大多數的協程實現不盡一致----導致每一個事件的處理都應短暫,
Time of Update: 2018-08-19
前面的文章分享的部分功能都能正常使用,本次分享分析下 -- 輸入驗證為了保持項目的可學習性,我這裡將之前分享的代碼積累了下,放在github上,想要儘快入手學習的,可以直接cloneMy Code,寫代碼不上手,都等於白搭,光看的話,對於我來說,我是不行的,沒辦法學會。項目地址https://github.com/durban89/wiki_blogtag: 1.0.2有些同學可能看不懂,怎麼就只給了這些,完全不懂呀。我把使用的命令打出來,照著操作,就應該可以解決了git clone
Time of Update: 2018-08-19
叢集模式nats的叢集模式對用戶端來說並不是透明的。所以叢集對發行者和訂閱者都是有影響的。發行者和訂閱者都知道串連的是一個叢集的服務,而不是一個單點服務,換句話說發行者訂閱者都必須指明叢集中各個節點的地址。當然,發行者和訂閱者可以只針對叢集中的某節點發布訊息和訂閱訊息,不過這並不是叢集模式的目的。目的提高可用性和延展性。實現原理可用性,多個節點,掛掉任意一個,不影響整個叢集對外提供服務。伸縮性,服務端支援隨意增加節點。訂閱者可以感知服務端節點的變動,但是發行者並不能自動感知。3個node的叢集$
Time of Update: 2018-08-19
Tip1擷取最近運行容器的id 這是我們經常會用到的一個操作,按照官方樣本,你可以這樣做(環境ubuntu):這種方式在編寫指令碼的時候很有用,比如你想在指令碼中批量擷取id,然後進一步操作。但是這種方式要求你必須給ID賦值,如果是直接敲命令,這樣做就不太方便了。 這時,你可以換一種方式:docker ps -l -q命令將返回最近啟動並執行容器的id,通過設定別名(alias),dl命令就是擷取最近容器的id。這樣,就無需再輸入冗長的docker ps -l
Time of Update: 2018-08-19
前言class和interface在進階語言中是很重要的概念。class是對模型的定義和封裝,interface則是對行為的抽象和封裝。Go語言雖然沒有class,但是有struct和interface,以另一種方式實現同樣的效果。本文將談一談Go語言這與別不同的interface的基本概念和一些需要注意的地方。聲明interfacetype Birds interface { Twitter() string Fly(high int)
Time of Update: 2018-08-19
Golang開發環境搭建首先學習一門開發語言首先先要搭建開發環境,有了環境我們才能進行代碼的開發,先介紹在一些主流的作業系統編譯環境的搭建和IDE選擇。要搭建Go語言開發環境,先下載Go語言的開發套件,下載下載地址:https://golang.org/dl/,(牆內下載地址http://www.golangtc.com/download),Go為我們所熟知的所有平台架構提供了開發套件,比如我們熟知的Linux、Mac和Windows,其他的還有FreeBSD等。下載根據自己機器的作業系統選擇相
Time of Update: 2018-08-19
mongodb的安裝及配置,參考下文:https://blog.csdn.net/heshushun/article/details/77776706proto註冊協議擴充:1.服務端: 編譯 lobby.proto 檔案(對此不瞭解?請先閱讀《在 Golang 中使用 Protobuf》一文)得到 lobby.pb.go 檔案,命令如下: protoc --go_out=. lobby.proto將lobby.pb.go 放在LeafServerExample
Time of Update: 2018-08-19
1.websocket 簡介以往瀏覽器要擷取服務端資料,都是通過發送 HTTP 要求,然後等待服務端回應的。也就是說瀏覽器端一直是整個請求的發起者,只有它主動,才能擷取到資料。而要讓瀏覽器一側能夠擷取到服務端的即時資料,就需要不停地向服務端發起請求。雖然大多數情況下並沒有擷取到實際資料,但這大大增加了網路壓力,對於服務端來說壓力也直線上升。image.png由於 WebSocket 是全雙工系統通訊,所以當建立了 WebSocket 串連之後,接下來的通訊就類似於傳統的 TCP
Time of Update: 2018-08-18
What is Interface type in Go ?GoLang官網language specification文檔對interface type的概念說明如下:An interface type specifies a method set called its interface.A variable of interface type can store a value of any type with a method set that is any superset of
Time of Update: 2018-08-18
轉載至:https://studygolang.com/articles/9072無論何種語言,依賴管理都是一個比較複雜的問題。而Go語言中的依賴管理機制目前還是讓人比較失望的。在1.6版本之前,官方只有把依賴放在GOPATH中,並沒有多版本管理機制;1.6版本(1.5版本是experimental
Time of Update: 2018-08-18
本篇文章轉載自 http://www.cnblogs.com/qing123/articles/4353353.html?hmsr=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.comgolang 的fmt 包實現了格式化I/O函數,類似於C的 printf 和 scanf。# 定義樣本類型和變數type Human struct { Name string}var people =
Time of Update: 2018-08-18
對於golang, 交換兩個數很簡單,如下這麼寫就可以了:```i, j = j, i```等號左邊和右邊含有多個運算式,這就是平行賦值。賦值分為兩個步驟: 1. 計算等號左邊的運算元的索引運算式和取址運算式,計算等號右邊的運算式。 2. 賦值 我們來看下面一段代碼會輸出什嗎? ```func main() {i := 1s := []string{"A", "B", "C"}i, s[i-1] = 2,
Time of Update: 2018-08-18
請求響應模式無論是發布訂閱模式還是queue模式,nats都不能保證訊息一定發送到訂閱者,除非訂閱者發送一個響應給發行者。所以訂閱者發送一個回執給發行者,就是請求響應模式。這種模式有什麼用?nats要求訂閱者一定要先完成訂閱,發布訊息後,訂閱者才能收到訊息,類似離線訊息的模式nats不支援。就算先完成訂閱,後發送訊息,訊息發送方也不知道是否有訂閱者收到了訊息,請求響應模式就是應對這種情況。基本流程A發送訊息,B收到訊息,發送回執給A。這就是request
Time of Update: 2018-08-18
### 環境:作業系統:Windows 10 Go Version: go version go1.10.3 windows/amd64### 範例程式碼:```counts := make(map[string]int);os.Stdin.Chmod(os.ModeSetuid)input := bufio.NewScanner(os.Stdin);os.Stdin.WriteString("this is a test")for ; ; {if res := input.
Time of Update: 2018-08-18
失去了文法高量,更好閱讀體驗參見原文:https://www.cnblogs.com/cloudgeek/p/9497801.html今天咱一次講3個吧,趕一下進度,好早點開始聊kubernetes!從groupcache的項目目錄結構看,我們今天要學習groupcachepb、lru、singleflight這3個package:一、protobuf 這個目錄咋一看有2個檔案:go和proto尾碼的。proto尾碼的檔案和protocol buffers有關,所以先看看protocol