重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
Go語言由Google公司開發,并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發編程,性能堪比C語言,開發效率肩比Python,被譽為“21世紀的C語言”。
創新互聯建站-專業網站定制、快速模板網站建設、高性價比潁泉網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式潁泉網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋潁泉地區。費用合理售后完善,10余年實體公司更值得信賴。
Go語言在云計算、大數據、微服務、高并發領域應用應用非常廣泛。BAT大廠正在把Go作為新項目開發的首選語言。
Go語言應用范圍:
1、服務端開發:以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統、監控系統等;
2、DevOps:運維生態中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發;
3、網絡編程:大量優秀的Web框架如Echo、Gin、Iris、beego等,而且Go內置的 net/http包十分的優秀;
4、Paas云平臺領域:Kubernetes和Docker Swarm等;
5、分布式存儲領域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區塊鏈領域:區塊鏈里面有兩個明星項目以太坊和fabric都使用Go語言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實現的;
8、爬蟲及大數據:Go語言天生支持并發,所以十分適合編寫分布式爬蟲及大數據處理。
Go語言作為出現比較晚的一門編程語言,在其原生支持高并發、云原生等領域的優秀表現,像目前比較流行的容器編排技術Kubernetes、容器技術Docker都是用Go語言寫的,像Java等其他面向對象的語言,雖然也能做云原生相關的開發,但是支持的程度遠沒有Go語言高,憑借其語言特性和簡單的編程方式,彌補了其他編程語言一定程度上的不足,一度成為一個熱門的編程語言。
最近在學習Go語言,我之前使用過C#、Java等面向對象編程的語言,發現其中有很多的編程方式和其他語言有區別的地方,好記性不如爛筆頭,總結一下,和其他語言做個對比。這里只總結差異的地方,具體的語法不做詳細的介紹。
種一棵樹最好的時間是十年前,其次是現在。
3)變量初始化時候可以和其他語言一樣直接在變量后面加等號,等號后面為要初始化的值,也可以使用變量名:=變量值的簡單方式
3)變量賦值 Go語言的變量賦值和多數語言一致,但是Go語言提供了多重賦值的功能,比如下面這個交換i、j變量的語句:
在不支持多重賦值的語言中,交換兩個變量的值需要引入一個中間變量:
4)匿名變量
在使用其他語言時,有時候要獲取一個值,卻因為該函數返回多個值而不得不定義很多沒有的變量,Go語言可以借助多重返回值和匿名變量來避免這種寫法,使代碼看起來更優雅。
假如GetName()函數返回3個值,分別是firstName,lastName和nickName
若指向獲得nickName,則函數調用可以這樣寫
這種寫法可以讓代碼更清晰,從而大幅降低溝通的復雜度和維護的難度。
1)基本常量
常量使用關鍵字const 定義,可以限定常量類型,但不是必須的,如果沒有定義常量的類型,是無類型常量
2)預定義常量
Go語言預定義了這些常量 true、false和iota
iota比較特殊,可以被任務是一個可被編譯器修改的常量,在每個const關鍵字出現時被重置為0,然后在下一個const出現之前每出現一個iota,其所代表的數字會自動加1.
3)枚舉
1)int 和int32在Go語言中被認為是兩種不同類型的類型
2)Go語言定義了兩個浮點型float32和float64,其中前者等價于C語言的float類型,后者等價于C語言的double類型
3)go語言支持復數類型
復數實際上是由兩個實數(在計算機中使用浮點數表示)構成,一個表示實部(real)、一個表示虛部(imag)。也就是數學上的那個復數
復數的表示
實部與虛部
對于一個復數z=complex(x,y),就可以通過Go語言內置函數real(z)獲得該復數的實部,也就是x,通過imag(z)獲得該復數的虛部,也就是y
4)數組(值類型,長度在定義后無法再次修改,每次傳遞都將產生一個副本。)
5)數組切片(slice)
數組切片(slice)彌補了數組的不足,其數據結構可以抽象為以下三個變量:
6)Map 在go語言中Map不需要引入任何庫,使用很方便
Go循環語句只支持for關鍵字,不支持while和do-while
goto語句的語義非常簡單,就是跳轉到本函數內的某個標簽
今天就介紹到這里,以后我會在總結Go語言在其他方面比如并發編程、面向對象、網絡編程等方面的不同及使用方法。希望對大家有所幫助。
本文主要介紹了Go語言中文件讀寫的相關操作。
文件是什么?
計算機中的文件是存儲在外部介質(通常是磁盤)上的數據集合,文件分為文本文件和二進制文件。
os.Open() 函數能夠打開一個文件,返回一個 *File 和一個 err 。對得到的文件實例調用 close() 方法能夠關閉文件。
為了防止文件忘記關閉,我們通常使用defer注冊文件關閉語句。
Read方法定義如下:
它接收一個字節切片,返回讀取的字節數和可能的具體錯誤,讀到文件末尾時會返回 0 和 io.EOF 。 舉個例子:
使用for循環讀取文件中的所有數據。
bufio是在file的基礎上封裝了一層API,支持更多的功能。
io/ioutil 包的 ReadFile 方法能夠讀取完整的文件,只需要將文件名作為參數傳入。
os.OpenFile() 函數能夠以指定模式打開文件,從而實現文件寫入相關功能。
其中:
name :要打開的文件名 flag :打開文件的模式。 模式有以下幾種:
perm :文件權限,一個八進制數。r(讀)04,w(寫)02,x(執行)01。
Docker 提供了一個與 Docker 守護進程交互的 API (稱為Docker Engine API),我們可以使用官方提供的 Go 語言的 SDK 進行構建和擴展 Docker 應用程序和解決方案。
轉自:
整理:地鼠文檔
通過下面的命令就可以安裝 SDK 了:
該部分會介紹如何使用 Golang + Docker API 進行管理本地的 Docker。
第一個例子將展示如何運行容器,相當于 docker run docker.io/library/alpine echo "hello world" :
還可以在后臺運行容器,相當于 docker run -d bfirsh/reticulate-splines :
列出正在運行的容器,就像使用 docker ps 一樣:
如果是 docker ps -a ,我們可以通過修改 types.ContainerListOptions 中的 All 屬性達到這個目的:
通過上面的例子,我們可以獲取容器的列表,所以在這個案例中,我們可以去停止所有正在運行的容器。
通過指定容器的 ID,我們可以獲取對應 ID 的容器的日志:
獲取本地所有的鏡像,相當于 docker image ls 或 docker images :
拉取指定鏡像,相當于 docker pull alpine :
除了公開的鏡像,我們平時還會用到一些私有鏡像,可以是 DockerHub 上私有鏡像,也可以是自托管的鏡像倉庫,比如 harbor 。這個時候,我們需要提供對應的憑證才可以拉取鏡像。
值得注意的是:在使用 Docker API 的 Go SDK 時,憑證是以明文的方式進行傳輸的,所以如果是自建的鏡像倉庫,請務必使用 HTTPS !
我們可以將一個已有的容器通過 commit 保存成一個鏡像:
當然,除了可以管理本地的 Docker , 我們同樣也可以通過使用 Golang + Docker API 管理遠程的 Docker 。
默認 Docker 是通過非網絡的 Unix 套接字運行的,只能夠進行本地通信( /var/run/docker.sock ),是不能夠直接遠程連接 Docker 的。
我們需要編輯配置文件 /etc/docker/daemon.json ,并修改以下內容(把 192.168.59.3 改成你自己的 IP 地址),然后重啟 Docker :
創建 client 的時候需要指定遠程 Docker 的地址,這樣就可以像管理本地 Docker 一樣管理遠程的 Docker 了:
現在已經有很多可以管理 Docker 的產品,它們便是這樣進行實現的,比如: portainer 。