成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 學習:從環境搭建到寫一個 Web 服務

開發 前端
用 Go 寫一個 Web 程序,通過界面的簡單配置和 shell 腳本的相結合,可以打打降低部署的難度。

最近學習了 Go 語言,做下記錄。

Go 的來歷

和 C、C++ 相比, Go 是一門很年輕的語言。2007 年,在 Google 的內部,有三位大佬因為 C++ 的復雜性、構建編譯速度很慢和對并發支持不好等原因,便決定開發一門新的語言,于是他們基于 C 語言,做了功能的刪減和新增,便有了 Go 的誕生。

2009 年 10 月 30 日,在 Google Techtalk 上,Go 語言的初始三位創始人之一的羅伯·派克做了一次關于 Go 語言的演講,這也是 Go 語言第一次公開露面。十天后,谷歌正式宣布 Go 語言項目開源。

2012 年 3 月 28 日,Go 1.0 版本正式發布,同時 Go 官方發布了 “Go 1 兼容性” 承諾:只要符合 Go 1 語言規范的源代碼,Go 編譯器將保證向后兼容(backwards compatible),這給開發者帶來了安全感。

Go 的特點

  • 只有 25 個關鍵字,主流編程語言最少。
  • 內置垃圾收集,這是相比較 C 語言而言,(C# 和 Java 也有垃圾收集)。
  • 方法或變量的首字母大小寫決定可見性,無需通過額外的訪問修飾符,太喜歡這個了。
  • 內置接口類型,為程序的組合帶來方便。
  • 變量初始為類型零值,避免以隨機值作為初值的問題。
  • 函數或方法中的錯誤會通過 return 語句顯式地返回,調用者不能忽略對返回的錯誤的處理。
  • 內置數組邊界檢查,減少越界訪問帶來的安全隱患。
  • 內置并發支持,簡化并發程序設計,這也是很多人使用 Go 語言的一個原因。
  • 為了提升可讀性,Go 不支持默認函數參數。
  • 每個類型有自己的方法集,類型定義和方法實現是獨立的。

相關網站

  • https://golang.org : Go 原來的官網,現在訪問會跳轉到 go.dev 。
  • https://go.dev :  Go 現在的官網。
  • https://pkg.go.dev/ :包管理。
  • https://goproxy.cn/ :傲飛開發的 Go 模塊代理站,現在由七牛云托管。
  • http://goproxy.io/ : 李保坤開發的 Go 模塊代理站。

環境準備

版本

  • Mac:10.15.7
  • Go:1.19 ,目前最新的版本
  • VS Code:1.71.0

安裝

1、在 https://go.dev/dl 頁面下載 Mac 版本的 pkg 安裝文件:

圖片

2、根據向導進行 Go 的安裝,程序會安裝到 /usr/local/go 目錄中。

3、重啟終端、輸入命令 go version ,如果能正確顯示版本號說明安裝成功。

4、在 VS Code 中安裝 go 擴展:

圖片

5、在 VS Code 中敲 cmd+shift+p ,然后輸入 Go:Install ,選擇下圖紅框部分進行擴展工具的安裝;

圖片

6、全選所有的擴展工具,點擊確定,但這時通常會出現錯誤,不能正常安裝,采用下面第七步的方式可以解決這個問題:

圖片

7、在 ~/.bash_profile 文件中添加:

export GO111MODULE=on
export GOPROXY=https://goproxy.cn

執行 source ~/.bash_profile 使配置生效,然后重新執行第六步的擴展工具安裝。

8、到這環境就準備好了,可以開始寫代碼。

代碼示例

hello world

1、在 go-study 目錄中創建 helloworld 目錄,go-study 是我用來學習 Go 語言存放代碼的一個根目錄。

2、使用 VS Code 打開 helloworld 目錄,并在目錄中創建 main.go 文件,內容如下:

package main
import (
"fmt"
)
func main() {
fmt.Println("hello oec2003!")
}

3、使用 go run main.go 運行程序:

圖片

一個 web 服務

假設有這樣一個場景:

零代碼平臺涉及到很多不同的服務和中間件,在客戶服務器私有化部署時需要運維人員在服務器上進行各種配置才能搞定。

如果用 go 寫一個 web 程序,通過界面的簡單配置和 shell 腳本的相結合,可以打打降低部署的難度。

下面就來看看怎樣來做這個簡單配置的 web 程序。

1、創建 deploy-app 目錄,在目錄中創建 main.go 文件,內容如下:

package main
import (
"embed"
"io/fs"
"log"
"net"
"net/http"
"os"
)
func main() {
http.Handle("/", http.FileServer(getFileSystem()))
ip, err := getLocalIP()
if err != nil {
return
}
log.Println("啟動成功,通過 http://" + ip + ":10002 訪問")
server := http.Server{
Addr: ":10002",
Handler: nil,
}
server.ListenAndServe()
}
//go:embed wwwroot
var embededFiles embed.FS
func getFileSystem(useOS bool) http.FileSystem {
if useOS {
return http.FS(os.DirFS("wwwroot"))
}
fsys, err := fs.Sub(embededFiles, "wwwroot")
if err != nil {
panic(err)
}
return http.FS(fsys)
}
func getLocalIP() (ip string, err error) {
addrs, err := net.InterfaceAddrs()
if err != nil {
return
}
for _, addr := range addrs {
ipAddr, ok := addr.(*net.IPNet)
if !ok {
continue
}
if ipAddr.IP.IsLoopback() {
continue
}
if !ipAddr.IP.IsGlobalUnicast() {
continue
}
return ipAddr.IP.String(), nil
}
return
}
  • package :定義名為 main 的包,包名為 main 的包為應用程序的入口包。
  • import :導入需要使用的包。
  • go:embed : embed 是在 Go 1.16 中新加的功能,通過 //go:embed 指令,可以在編譯階段將靜態資源文件打包進編譯好的程序中,并提供訪問這些文件的能力。
  • getLocalIP :獲取 IP 的一個函數。
  • server.ListenAndServe() :使用該方法可以啟動一個 http 的服務器監聽。

2、在 deploy-app 目錄中創建 wwwroot 目錄,在 wwwroot 中創建 idnex.html 文件:

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>瞬翕云私有部署版</title>
<link href="css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
</style>
</head>
<body>
<div>
<div class="text">私有化部署</div>
</div>
<div>
<h2 class="ant-typography">訪問地址設置</h2>
<div>例:http://fwhyy.com、http://10.211.55.3:9000(支持設置 域名、域名+端口、IP+端口)</div>
<div>訪問地址</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">http://</span>
<input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default" value="">
</div>
<button type="button" class="btn btn-primary">下一步</button>
</div>
</body>
</html>

3、使用 go run main.go 運行看看效果:

圖片

在瀏覽器中使用 http://192.168.1.7:10002 進行訪問,如下圖:

圖片

4、使用命令 GOOS=linux GOARCH=amd64 go build main.go 進行編譯構建,構建完成后會在 deploy-app 目錄中生成一個名為 main 的二進制文件,如下圖:

圖片

5、將 main 文件拷貝到 CentOS 虛擬機中,使用 ./main 命令運行,如下圖:

圖片

可以看到運行效果和本機運行的效果相同:

圖片

總結

1、使用 embed 功能可以將靜態資源打包到二進制的包中。

2、Go 語言編譯后的是一個二進制文件,在服務器上不需要進行運行時的安裝即可運行。

3、學習任何語言,語法部分可以通過刷刷力扣的題來進行熟悉,一個比較實用的小技巧。

責任編輯:姜華 來源: 不止dotNET
相關推薦

2019-05-08 14:37:49

Web服務器HTTP

2021-08-03 09:07:39

GolangGrpc服務

2023-05-10 08:05:41

GoWeb應用

2017-06-27 09:26:53

運維app開發

2019-08-26 09:25:23

RedisJavaLinux

2017-05-25 12:40:06

SOA微服務系統

2014-10-15 11:01:02

Web應用測試應用

2022-09-20 08:43:37

Go編程語言Web

2020-10-29 16:00:03

Node.jsweb前端

2022-02-22 11:57:32

BOAWeb服務器

2017-06-08 15:53:38

PythonWeb框架

2014-04-14 15:54:00

print()Web服務器

2022-07-06 19:00:00

微服務框架鏈路

2019-08-21 17:41:29

操作系統軟件設計

2021-04-25 08:58:00

Go拍照云盤

2017-07-05 15:09:52

密碼token瀏覽器

2018-07-10 15:15:11

2015-10-12 16:45:26

NodeWeb應用框架

2017-04-11 16:16:48

HTTPS互聯網服務端

2019-07-31 10:18:17

Web 開發Python
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 96国产精品久久久久aⅴ四区 | 亚洲成av人片在线观看 | av中文字幕在线播放 | 中文字幕一级 | 丁香久久 | 国产日本精品视频 | 高清黄色网址 | 精品久久久久久18免费网站 | 亚洲www啪成人一区二区 | 蜜桃视频在线观看免费视频网站www | 欧美国产精品一区二区三区 | 日韩成人在线看 | 天天综合网91 | 日韩精品a在线观看图片 | 久久久久黄色 | 欧美日韩一区在线 | av官网在线 | 久久一二| 日韩av免费看 | www国产成人免费观看视频 | 精品久久久久久久久久久久久久久久久 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 久久亚洲一区 | 亚洲成人在线网 | 免费啪啪| 免费毛片www com cn | 国产精品久久国产精品99 gif | av网站免费看 | 亚洲国产成人av好男人在线观看 | 欧美一卡二卡在线观看 | 美日韩免费视频 | 久久中文高清 | 欧美大片在线观看 | 激情一区 | 国产蜜臀97一区二区三区 | 精品熟人一区二区三区四区 | 福利视频1000| 丁香综合 | 中文字幕在线不卡播放 | 久久国产精品视频 | 亚洲网址 |