本文目錄一覽:
- 1、Golang入門到項目實戰 | golang簡介及安裝
- 2、golang編寫的項目,使用alpine製作鏡像遇到的一個問題解決
- 3、Golang入門到項目實戰 | golang並發變成之通道channel
- 4、GitHub Go項目推薦|Golang下的命令行顏色渲染工具庫|支持windows
- 5、Golang項目部署3,容器部署
- 6、一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
Golang入門到項目實戰 | golang簡介及安裝
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。
go語言特點
go語言的應用領域
哪些公司(項目)在使用go語言
下載開發包
windows下安裝
1.打開下載的msi可執行文件,根據提示進行安裝。默認會安裝在c:/Program Files/go目錄下面。會自動添加go可執行文件環境變數。
2.驗證安裝情況
a.打開命令行
b. 輸入$ go version
linux下安裝
1.在/usr/local/下面創建一個目錄go
2.下載壓縮文件到該目錄(/usr/local/go),並解壓縮
3.添加/usr/local/go/bin到PATH環境變數,打開$HOME/.profile 或者/etc/profile輸入如下內容:
4.執行如下命令使得配置文件及時生效
驗證
1.如果你的mac有Homebrew包管理工具,可以使用它來安裝
2.如果沒有下載mac安裝包,根據提示安裝
3.默認安裝在/usr/local/go下面
4.設置環境變數,同Linux
golang編寫的項目,使用alpine製作鏡像遇到的一個問題解決
GraphicsMagick,一款高性能的圖片處理工具,由於項目需要,用到它,自然而然用到了關於gm的第三方庫 這個庫按照作者的提示,要安裝GraphicsMagick-devel依賴。
項目寫完了,接下來用alpine做為基礎鏡像,準備製作項目的鏡像。
golang項目,是在ubuntu下編寫的,編譯成二進位文件了,只要把二進位文件放進鏡像里即可,遇到的問題有2個
1 容器跑起來,一直報二進位文件no found
我認認真真的確認了文件,以及它的路徑,確實是存在的,怎麼會報文件找不到呢?!
原來是musl和glibc是兼容的問題,在Dockerfile里要加以下兩步
2 Error loading shared library libGraphicsMagickWand-Q16.so.2: No such file or directory
明明按要求安裝GraphicsMagick-devel依賴,為啥還報這種錯
於是想到了,是不是也要ln做一下軟鏈接呢?於是學著上面的樣子在Dockerfile里補上
再跑,問題依舊,莫非是軟連接的地址寫錯了!回到開發的電腦上用ldd命令查看一下
果然,編譯後的二進位文件依賴路徑是/lib,而不是/lib64
於是,修改Dockerfile里的寫法
問題解決,開心:)
參考資料:
Golang入門到項目實戰 | golang並發變成之通道channel
Go提供了一種稱為通道的機制,用於在goroutine之間共享數據。當您作為goroutine執行並發活動時,需要在goroutine之間共享資源或數據,通道充當goroutine之間的管道(管道)並提供一種機制來保證同步交換。
根據數據交換的行為,有兩種類型的通道:無緩衝通道和緩衝通道。無緩衝通道用於執行goroutine之間的同步通信,而緩衝通道用於執行非同步通信。無緩衝通道保證在發送和接收發生的瞬間兩個goroutine之間的交換。緩衝通道沒有這樣的保證。
通道由make函數創建,該函數指定chan關鍵字和通道的元素類型。
這是創建無緩衝和緩衝通道的代碼塊:
語法
使用內置函數make創建無緩衝和緩衝通道。make的第一個參數需要關鍵字chan,然後是通道允許交換的數據類型。
這是將值發送到通道的代碼塊需要使用-運算符:
語法
一個包含5個值的緩衝區的字元串類型的goroutine1通道。然後我們通過通道發送字元串「Australia」。
這是從通道接收值的代碼塊:
語法
– 運算符附加到通道變數(goroutine1)的左側,以接收來自通道的值。
在無緩衝通道中,在接收到任何值之前沒有能力保存它。在這種類型的通道中,發送和接收goroutine在任何發送或接收操作完成之前的同一時刻都準備就緒。如果兩個goroutine沒有在同一時刻準備好,則通道會讓執行其各自發送或接收操作的goroutine首先等待。同步是通道上發送和接收之間交互的基礎。沒有另一個就不可能發生。
在緩衝通道中,有能力在接收到一個或多個值之前保存它們。在這種類型的通道中,不要強制goroutine在同一時刻準備好執行發送和接收。當發送和接收阻塞時也有不同的條件。只有當通道中沒有要接收的值時,接收才會阻塞。僅當沒有可用緩衝區來放置正在發送的值時,發送才會阻塞。
實例
運行結果
GitHub Go項目推薦|Golang下的命令行顏色渲染工具庫|支持windows
Golang下的命令行色彩使用庫, 擁有豐富的色彩渲染輸出,通用的API方法,兼容Windows系統
倉庫名稱 :color
標星(star) :221 (不錯哦,潛力股項目)
標星趨勢
拷貝(fork) :21
貢獻人數 :3
倉庫大小 :1 MB
主要開發語言:Go
語言分布:Go:99.75%、Batchfile:0.25%
代碼提交周期分布 :
作者動態 :
2星
Golang下的命令行色彩使用庫, 擁有豐富的色彩渲染輸出,通用的API方法,兼容Windows系統
功能特色
程序員新視界:分享有趣、有料的程序員話題,每天進步一點點。
Golang項目部署3,容器部署
容器部署即使用 docker 化部署 golang 應用程序,這是在雲服務時代最流行的部署方式,也是最推薦的部署方式。
跨平台交叉編譯是 golang 的特點之一,可以非常方便地編譯出我們需要的目標伺服器平台的版本,而且是靜態編譯,非常容易地解決了運行依賴問題。
使用以下指令可以靜態編譯 Linux 平台 amd64 架構的可執行文件:
生成的 main 便是我們靜態編譯的,可部署於 Linux amd64 上的可執行文件。
我們需要將該可執行文件 main 編譯生成 docker 鏡像,以便於分發及部署。 Golang 的運行環境推薦使用 alpine 基礎系統鏡像,編譯出的容器鏡像約為 20MB 左右。
一個參考的 Dockerfile 文件如下:
其中,我們的基礎鏡像使用了 loads/alpine:3.8 ,中國國內的用戶推薦使用該基礎鏡像,基礎鏡像的 Dockerfile 地址: ,倉庫地址:
隨後使用 ” docker build -t main . ” 指令編譯生成名為 main 的 docker 鏡像。
需要注意的是,在某些項目的架構設計中, 靜態文件 和 配置文件 可能不會隨著鏡像進行編譯發布,而是分開進行管理和發布。
例如,使用 MVVM 模式的項目中(例如使用 vue 框架),往往是前後端非常獨立的,因此在鏡像中往往並不會包含 public 目錄。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的項目中,也往往並不需要 config 目錄。
因此對於以上示例的 Dockerfile 的使用,僅作參考,根據實際情況請進行必要的調整。
使用以下指令可直接運行剛才編譯成的鏡像:
容器的分發可以使用 docker 官方的平台: ,國內也可以考慮使用阿里云: 。
在企業級生產環境中, docker 容器往往需要結合 kubernetes 或者 docker swarm 容器編排工具一起使用。
容器編排涉及到的內容比較多,感興趣的同學可以參考以下資料:
一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
原項目採用gopath來管理的引用庫,但有小夥伴反應說包不好下,雖然我把對應的包做了百度雲盤共享,但小夥伴們仍然感覺不太好用。特別是最近把go SDK升級到1.18.在管理包上終於下決心使用mod來重新重構下包管理。
一、配置啟用Mod
首先那:
確定是否開啟了
如果沒有開啟請開啟它。開啟命令執行:
#設置 使用七牛雲下載
來看下現在的配置:
二、創建項目
上邊都說了如何開啟了。下面介紹下如何使用
1. 可以隨便找一個目錄創建項目:myGoProjectNew
這個時候查看目錄下會多出一個go.mod的文件:
裡面也有了。標識了下SDK的版本1.18
2. 創建 main.go文件
3. 執行:
這時候就會自動下載引用了。
查看Go.mod文件
最後放兩張效果圖:
感覺還可以得點贊收藏哦。想要源碼的私信我獲取源碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/250830.html