原创 Docker 鏡像管理

運行容器示例 這是前一篇的內容,可以先來練習回顧一下容器的操作。 Nginx 直接下載鏡像並啓動容器,這裏選擇alpine版的: $ docker run --name web1 -p 8001:80 -d nginx:alpine Una

原创 Docker 基礎知識

容器基礎知識 容器級虛擬化,不再爲每一個虛擬機創建單獨的內核,而是通過在宿主機的內核上將6種資源通過內核機制(namespaces)隔離出來,每一個namespace就是一個單獨的容器。Linux領域的容器技術,就是靠內核級的6個names

原创 克隆虛擬機

VMware克隆 通過虛擬機克隆,可以方便的生成多臺狀態一樣的虛擬機來使用。右鍵虛擬機:管理 -> 克隆 鏈接克隆與完整克隆 完整克隆就是生成一個完全獨立的虛擬機。所以這裏主要說明一下什麼是鏈接克隆。鏈接克隆的最大優點:速度快,節省磁盤空間

原创 使用 cgo 調用 C 代碼

使用 cgo 調用 C 代碼 cgo 是用來爲 C 函數創建 Go 綁定的工具。諸如此類的工具都叫作外部函數接口(FFI)。 其他的工具還有,比如SWIG(sig.org)是另一個工具,它提供了更加複雜的特性用來集成C++的類,這個不講。

原创 gopl 底層編程(unsafe包)

包 unsafe 廣泛使用在和操作系統交互的低級包中, 例如 runtime、os、syscall、net 等,但是普通程序是不需要使用它的。 unsafe.Sizeof、Alignof 和 Offsetof 函數 unsafe.Siz

原创 gopl 反射2

本篇各章節的主要內容: 使用 reflect.Value 來設置值:通過 Elem() 方法獲取指針對應的值,然後就可以修改值 示例,解碼 S 表達式:之前內容的綜合運用 訪問結構體成員標籤:像JSON反序列化那樣,使用反射獲取成員標籤

原创 gopl 反射1

Go 語言提供了一種機制,在編譯時不知道類型的情況下,可更新變量、在運行時查看值、調用方法以及直接對它們的佈局進行操作,這種機制稱爲反射(reflection)。 本篇各章節的主要內容: 爲什麼使用反射:不使用反射會有哪些限制 re

原创 Go 表達式求值器

示例:表達式求值器 本篇將創建簡單算術表達式的一個求值器。 定義接口和類型 開始,先確定要使用一個接口 Expr 來代表這種語言的任意一個表達式。暫時沒有任何方法,稍後再逐個添加: // Expr: 算術表達式 type Expr in

原创 gopl 測試

go test 測試是自動化測試的簡稱,即編寫簡單的程序來確保程序(產品代碼)在該測試中針對特定輸入產生預期的輸出。這些測試主要分兩種: 通過精心設計,用來檢測某種功能 隨機性的,用來擴大測試的覆蓋面 go test 子命令是 Go 語

原创 gopl 包和工具

空導入 如果導入包的名字沒有在文件中引用,就會產生一個編譯錯誤。但是,有時候必須導入一個包,這僅僅是爲了利用它的副作用:對包級別的變量執行初始化表達式求值,並執行它的 init 函數。這裏必須使用一個重命名導入,使用下劃線作爲替代的名字。這

原创 Go 併發非阻塞緩存

競態檢測器 即使再仔細的檢查,仍然可能在併發上犯錯。Go 的 runtime 提供了動態分析工具:競態檢測器(race detectotr)。 在下一節的示例中會用到競態檢測器,所以在用之前,先了解一下這個工具。 開啓競態檢測器 簡單

原创 WIn10防火牆入站規則設置無效

在將自己的筆記本納入監控系統監控(通過SNMP進行監控)的過程中,遇到了服務無法開通的問題。筆記本是Win10的系統。並且是需要跨網段提供服務的。 開通SNMP服務 首先要開通SNMP服務。 安裝 控制面板->程序->啓用或關閉Window

原创 gopl 使用共享變量實現併發

競態 併發,如果無法確定一個事件先於另外一個事件,那麼這兩個事件就是併發的。 併發安全(concurrency-safe),如果一個函數在併發調用時仍然能正確工作,那麼這個函數就是併發安全的。如果一個類型的所有可訪問方法和操作都是併發安全

原创 Go 函數特性和網絡爬蟲示例

爬取頁面 這篇通過網絡爬蟲的示例,來了解 Go 語言的遞歸、多返回值、延遲函數調用、匿名函數等方面的函數特性。首先是爬蟲的基礎示例,下面兩個例子展示通過 net/http 包來爬取頁面的內容。 獲取一個 URL 下面的程序展示從互聯網獲

原创 Go 網絡編程示例

示例:併發時鐘服務器 本節介紹 net 包,它提供構建客戶端和服務器程序的組件,這些程序通過 TCP、UDP 或者 UNIX 套接字進行通信。網絡服務 net/http 包是在 net 包的基礎上構建的。 時鐘服務器 這個示例是一個時鐘