原创 golang使用unsafe包實現指針運算操作private變量

golang中是有指針概念的,但是go中的指針功能被限制了,不像C/C++中那樣,可以對指針進行運算 比如在C/C++中 *p++ 這樣是正確的。但是在go中,這樣寫是錯誤的。至於go爲什麼會屏蔽指針的運算,比較多的一種說法是go團隊認爲指

原创 golang造輪子,封裝一個簡單的http client

近來無事,本着愛折騰的原則,在go原生 http client 的基礎上,自己封裝了一個go的http client。由於才疏學淺,再加是第一次造輪子,在各位大佬面前獻醜了,寫的爛的地方,請輕噴。還請各位不吝賜教。 先放地址 gethub:

原创 linux shell 腳本 常用的if判斷條件

工作中經常需要寫shell腳本來處理一些重複的東西,使用腳本自動編譯,使用腳本多機器傳輸文件。 因爲不是天天寫shell,只是用到的時候寫一個,再加上腳本中的if的判斷條件有點多,容易忘記,所以做個備忘錄,以備不時之需 先說一下 if 表達

原创 linux下通過rpath解決cmake動態編譯後找不到動態鏈接庫問題

以後沒啥好圖,封面就上小姐姐圖了 這次書接上回,前段時間寫了一篇《使用cmake構建C/C++項目和動態庫》的文章,傳送門。但是直接通過cmake編譯鏈接後,會有一個問題,那就是需要的.so文件不能更改目錄,一旦.so文件目錄變了,整個程

原创 使用cmake構建C/C++項目和動態庫

編譯C/C++文件時,很多時候都是直接使用像 gcc main.c 或者 g++ main.cpp 這樣的命令編譯的。但是代碼文件多了後,這樣編譯就很困難了。這時候 就出現了MakeFile 這個工具。</br> MakeFile 解決了多

原创 linux下 C++ 使用 epoll 多路複用 實現高性能的tcpserver

linux系統中,實現socket多路複用的技術有select 、poll 、epoll 等多種方式。這些不同方式個有優缺點和適用場景,這不是本文討論的重點,又興趣的可以自己搜索學習一下。但是在高併發場景下, epoll 性能是最高的, N

原创 go 使用pprof 排查內存泄露

go 是自帶gc的語言,會自動管理內存,不用像C/C++那樣,需要程序員手動釋放內存,不用手動管理內存,就能少掉很多頭髮 go的GC會自動管理內存,但是這不代表go程序就不會內存泄露了。 go常見產生內存泄露的原因就是goroutine沒

原创 簡書 see you around

這應該是在簡書的最後一篇文章了,以後不會在簡書發文章了,離開不是因爲簡書不好了,只是簡書不適合發技術類文章了。 簡書現在大多數文章都是雞湯文,技術氛圍太差了,換一個技術氛圍好的點平臺。 我也想過在多個平臺發文章,但是在多個平臺發文章寫起來會

原创 ansible 在參數中傳入密碼

ansible是一個基於python開發自動化的運維工具,這個工具強大的地方是,被操作的機器上不需要安裝任何軟件,只需要在發起操作的機器上安裝就可以使用了。而且ansible支持很多模塊,還可以基於ansible二次開發,添加自己的功能 a

原创 通過彙編看golang函數的多返回值

golang這門語言,有個比較好的特性,就是支持函數的多返回值。想C,C++,Java等這些語言,是不支持函數多返回的。但是C,C++可以使用傳遞指針,實現函數多返回。但是,你有沒有想過,golang是怎樣實現函數多返回值的呢? 我們知道,

原创 docker學習3,打包一個docker鏡像

之前使用docker安裝過mysql,使用的是別人製作好的鏡像。今天使用Dockerfile自己打包一個docker的鏡像。這個鏡像是一個web的鏡像,使用go編寫。go非常適合用來寫docker的鏡像程序,因爲go編譯後的二進制程序不依賴

原创 docker學習2,docker基本命令

操作docker容器,和操作linux差不多,都是使用命令行操作。不同的是,操作docker需要使用docker的命令。docker的命令和linux的命令很多相似的,也有一些不同。廢話不多說,開始學習。docker命令分爲鏡像相關,容器生

原创 使用一個字段實現第二條件排序

在排序中,經常遇到變量相同情況下的排序問題。在MySQL中可以使用 ORDER BY 約束多個字段。但是在redis中,使用sorted set排序時,score只能設置一個變量。這樣在score相同時,只能使用字典序了(這個是從文檔上看到

原创 使用golang的sort包進行排序

這是在掘金的第一篇文章,之前一直在某書發文章,進來感覺某書越來越不好了,想把文章 都搬到掘金來。 介紹 golang和java等語言一樣,系統自帶了一個排序方法,可以快速實現排序。廢話不多說,先上栗子,再解釋。 package main

原创 go數據庫查詢 scan error sql: Scan error on column index XXXXX unsupported Scan, storing driver.Value ...

 使用go查詢數據庫時,有時候會遇到 scan error sql: Scan error on column index XXXXX unsupported Scan, storing driver.Value type <nil>這個錯