Time of Update: 2017-12-27
標籤:go語言 包結構Go語言的工作空間:通常添加到GOPATH中。srcbinpkg對於bin和pkg兩個目錄,主要影響go
Time of Update: 2017-12-27
標籤:go語言 並發編程
Time of Update: 2018-01-01
標籤:一個 tac 資料 hang rgs ace alt 參考型別 gpo
Time of Update: 2018-01-01
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。# 64行代碼實現零拷貝go的TCP拆包粘包### 前言這段時間想用go寫一個簡單IM系統,就思考了一下go語言TCP的拆包粘包。TCP的拆包粘包有一般有三種解決方案。#### 使用定長位元組實際使用中,少於固定字長的,要用字元去填充,空間使用率不夠高。#### 使用分隔字元一般用文本傳輸的,使用分隔字元,IM系統一般對效能要求高,不推薦使用文本傳輸。####
Time of Update: 2018-01-01
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1.切片:切片是數組的一個引用,因此切片是參考型別2.切片的長度可以改變,因此,切片是個可變的數組。3.切片遍曆方式和數組一樣,可以用len()求長度4.cap可以求出slice最大的容量,0<=cap(slice) <=len(array),其中array是slice引用的數組5.切片的定義:var 變數名 [ ]類型,例如:var str []string ,var arr [] intpackage
Time of Update: 2017-12-31
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。bug重現[ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1. output: Access is denied. 0 dir(s) moved解決方案第一步//找到這個檔案 github.com/Masterminds/glide/blob/master/path/winbug.go//
Time of Update: 2017-12-31
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。由於各種問題,國內使用 go get 安裝 golang 官方包可能會失敗,如我自己在安裝 collidermain 時,出現了以下報錯: $ go get collidermainpackage golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket" (https fetch: Get
Time of Update: 2017-12-31
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。因為golang的map和列表切片都是參考型別,且非安全執行緒的,所以在多個go routine中進行讀寫操作的時候,會產生“map read and map write“的panic錯誤。 某一些類型的對象,會有這種類似的set方法來寫資料,或者get方法來返回一個map:func (this *object) Set(name, val) { this.Lock() defer this.Unlock() this.
Time of Update: 2017-12-30
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。雖說go有自己的log內部實現,但是用起來呢我不太舒服,所以重新造了個。```gopackage mainimport ("github.com/gamelife1314/logging""os")func main() {logger := logging.GetDefaultLogger()logger.Debug("hello world, %s", "logging&
Time of Update: 2017-12-30
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。前言本文介紹如何從原始碼構建 k8s 二進位安裝包準備工作作業系統 cenos7.x安裝 docker參考 官網 或網上各路教程下載原始碼$ cd /opt/$ git clone https://github.com/kubernetes/kubernetes.gitcheckout$ cd /opt/kubernetes$ git checkout v1.8.4 -b v1.8.4準備基礎 docker
Time of Update: 2017-12-30
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。channel用於主進程、協程之間的通訊。1.同步模式channel預設為同步模式,即不建立緩衝區,發送和接收需要一一配對,不然發送方會被一直阻塞,直到資料被接收。需要注意的是,同步的channel不能在一個協程中發送&接收,因為會被阻塞而永遠跑不到接收的語句。一個最簡單的例子:package mainimport "fmt"func main() { data := make(chan int)
Time of Update: 2017-12-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。golang struct to json html without escape default state when struct value is html code output to json will covert to unicode package mainimport ( "encoding/json" "fmt" "os")func
Time of Update: 2017-12-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。最近組裡新項目要求用go來寫,沒辦法只能邊看文檔邊寫代碼,今天遇到鬱悶的問題,查了好久最終發現居然是一個標點符號的導致的,遂紀錄之剛剛給一個介面寫單元測試時想初始化一個結構體數組,然後遍曆該數組並建立http.Request進行測試,結果一直報錯,最後。。。才發現golang結構體初始化的正確姿勢T_T 1 requests := []AuthRequest{ 2 AuthRequest{ 3
Time of Update: 2017-12-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。項目中需要用到golang的隊列,container/list,需要放入的元素是struct,但是因為golang中list的設計,從list中取出時的類型為interface{},所以需要想辦法把interface{}轉換為struct。這裡需要用到interface assertion,具體操作見下面代碼: 1 package main 2 3 import ( 4 "container/list"
Time of Update: 2017-12-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。[zero](https://github.com/9b9387/zero)是我用Go實現的一個非常輕量的Socket伺服器,可用於快速製作遊戲Demo,整個項目不超過500行代碼。提供心跳檢測,會話管理功能。接收發送資料使用位元據流的方式,可以非常方便的配合Protobuf使用。###
Time of Update: 2017-12-28
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package mainimport ("fmt""strings")func main() {strResult := NumberFormat("1234567898.55")fmt.Println(strResult)}//格式護數值 1,234,567,898.55func NumberFormat(str string) string {length := len(str)if length < 4
Time of Update: 2017-12-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1、未初始化的channel讀,阻塞package mainimport ( "fmt" "time")func main() { var ch chan int go check(ch) fmt.Println("main runtime end") time.Sleep(time.Second * 1000)}func check(ch
Time of Update: 2017-12-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。建立一個 Golang app 是一件簡單又輕鬆的事情,但是有時候你想給你的應用錦上添花:建立一個 GUI!在本篇文章中,我將通過使用 astilectron 工具中的 bootstrap 以及 bundler 給一個簡單的 Golang 程式添加 GUI。我們的帶有 GUI 的 Golang app 能夠開啟一個檔案夾並且展示其中的內容。你可以在這裡找到完成後的 [代碼](https://github.com/asticode/
Time of Update: 2017-12-27
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。改變字串中的某些字元str := "hello roc"bytes := []byte(str)bytes[1] = 'a'str = string(bytes) //str == "hallo roc"截取子串substr := str[n:m] //截取從索引n到m-1的子串遍曆字串//for遍曆,此方式只能遍曆存放ASCII//編碼的字串,比如中文就不行for i :=
Time of Update: 2017-12-26
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。三色標記三色標記的原理如下:整個進程空間裡申請每個對象佔據的記憶體可以視為一個圖, 初始狀態下每個記憶體對象都是白色標記,先stop the world,將掃描任務作為多個並發的goroutine立即入隊給調度器,進而被CPU處理,第一輪先掃描所有可達的記憶體對象,標記為灰色放入隊列;第二輪可以恢複start the