專欄為大家介紹於搭建go-micro#》以下由Golang教程幫助!
最近因為要用到 go-micro,所以在學習微服務相關的內容,這篇是記錄 micro 的建構過程。
安裝環境
micro 提供了一個 runtime,在使用 go-micro 之前需要先安裝它。有以下幾種方式安裝
源go get github.com/micro/micro/v2
這種方式我裝不上,不是網路的原因,不知道哪裡有衝突。 。 。
dockerdocker pull micro/micro
### MacOS
curl -fsSL https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh | /bin/bash
# Linux
wget -q https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh -O - | /bin/bash
# Windows
powershell -Command "iwr -useb https://raw.githubusercontent.com/micro/micro/master/scripts/install.ps1 | iex"
推薦使用這種方式下載安裝,把編譯好的二進位包加入到環境變數就能直接使用了。不想用腳本安裝可以在 github 的 release 頁面下載https://github.com/micro/micro/releases
#測試一下
現在已經安裝好 micro 了,測試一下。micro web輸出
$ micro web2020-07-05 04:24:16 file=http/http.go:90 level=info service=web HTTP API Listening on [::]:80822020-07-05 04:24:16 file=v2@v2.9.1/service.go:200 level=info service=web Starting [service] go.micro.web2020-07-05 04:24:16 file=grpc/grpc.go:864 level=info service=web Server [grpc] Listening on [::]:264492020-07-05 04:24:16 file=grpc/grpc.go:697 level=info service=web Registry [mdns] Registering node: go.micro.web-b76a12a1-5226-429f-9633-ce304f179657現在造訪
localhost:8082 就可以查看 micro 的 web 頁面了。
安裝 protoc
protoc 是 protobuf 的編譯器,而 protobuf 是用來傳輸資料的格式,類似 json、xml 這些。protoc 下載位址
https://github.com/protocolbuffers/protobuf/releases下載好之後,bin 資料夾中有個 protoc 的可執行文件,把這個也加入到環境變數。 (可以直接把它放到已經添加了環境變量的資料夾下就可以了,可以避免電腦裡寫滿了各種環境變量,並且常用工具放到一個資料夾也方便管理)#推薦:《
go語言》
還有個protoc-gen-go 也需要放進去,可以用下面的方式下載。go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go
example
現在讓我們寫一個 demo 來練習一下。 一共有三個文件,server.go,
client.go,
greeter.proto
#greeter.proto
syntax = "proto3";package protos;service Greeter {
rpc Hello (Request) returns (Response){};}message Request {
string name = 1;}message Response {
string greeting = 2;}
server.gopackage mainimport (
"context"
"fmt"
"github.com/micro/go-micro/v2")type Greeter struct {}func (g *Greeter) Hello(context context.Context, req *Request, rsp *Response) error {
rsp.Greeting = "Hello " + req.Name return nil}func main() {
service := micro.NewService(
micro.Name("greeter"),
)
service.Init()
err := RegisterGreeterHandler(service.Server(), new(Greeter))
if err != nil {
fmt.Println(err)
}
if err := service.Run(); err != nil {
fmt.Println(err)
}}
client.gopackage mainimport ( "context" "fmt" "github.com/micro/go-micro/v2")func main() { service := micro.NewService(micro.Name("greeter.client")) service.Init() greeter := NewGreeterService("greeter", service.Client()) rsp, err := greeter.Hello(context.TODO(), &Request{Name: "Zaun pianist"}) if err != nil { fmt.Println(err) } fmt.Println(rsp.Greeting)}#強烈建議使用go mod 來管理依賴,專案更新速度很快,百度上的許多教學都不行了,安裝過程各種錯誤 這是我的mod 檔
module hello go 1.14require ( github.com/golang/protobuf v1.4.0 github.com/micro/go-micro/v2 v2.9.1 google.golang.org/protobuf v1.22.0)注意,我的greeter.proto 和server.go、client.go 檔案是放在同一個資料夾下面的
編譯greeter.proto##
protoc --micro_out=. --go_out=. greeter.proto
編譯完成之後,會產生兩個go 原始碼檔:
greeter.pb.go
greeter.pb.micro .go
執行
現在可以執行server 了,這裡因為client 和server 是放在同一個資料夾,也就是同一個套件中,兩個都有main 函數,所以不能用go run ./
,至於為什麼要加上另外兩個,這個是go 語言編譯器的要求,必須要指明編譯所需要用到的文件。
go run server.go greeter.pb.go greeter.pb.micro.go
可以用micro 查看目前正在執行的微服務
micro list services
也可以在web 端查看
micro web
如果沒有出錯,這個時候是可以看到服務已經註冊成功了。
$ micro list services go.micro.web greeter
測試
現在可以執行客戶端來測試一下了
go run client.go greeter.pb.go greeter.pb.micro.go
我在測試的時候出了問題,服務已經註冊好了,但是client 去呼叫的時候,缺少回傳了
{"id":"go.micro.client","code":408,"detail":"context deadline exceeded","status":"Request Timeout"}panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x28 pc=0xeef454]
檢查一下服務的資訊
micro get service greeter
$ micro get service greeter service greeter version latest ID Address Metadata greeter-5d86321e-86f2-41a6-8230-f015466bf791 10.198.75.60:51395 broker=http,protocol=grpc,registry=mdns,server=grpc,transport=grpc Endpoint: Greeter.Hello Request: { message_state MessageState { no_unkeyed_literals NoUnkeyedLiterals do_not_compare DoNotCompare do_not_copy DoNotCopy message_info MessageInfo } int32 int32 unknown_fields []uint8 name string } Response: { message_state MessageState { no_unkeyed_literals NoUnkeyedLiterals do_not_compare DoNotCompare do_not_copy DoNotCopy message_info MessageInfo } int32 int32 unknown_fields []uint8 greeting string }
注意看裡面的IP 位址,註冊到了10.198.xx 去了,因此才會報錯? ? ?
因此在註冊服務的時候,指定 IP 位址
go run server.go greeter.pb.go greeter.pb.micro.go --server_address=localhost:8888
這時候再用 client 呼叫就不會出錯了。
$ go run client.go greeter.pb.go greeter.pb.micro.go Hello Zaun pianist
以上是如何建構go-micro開發環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Toensureinitfunctionsareeffectiveandmaintainable:1)Minimizesideeffectsbyreturningvaluesinsteadofmodifyingglobalstate,2)Ensureidempotencytohandlemultiplecallssafely,and3)Breakdowncomplexinitializationintosmaller,focusedfunctionstoenhancemodularityandm

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

開發者應遵循以下最佳實踐:1.謹慎管理goroutines以防止資源洩漏;2.使用通道進行同步,但避免過度使用;3.在並發程序中顯式處理錯誤;4.了解GOMAXPROCS以優化性能。這些實踐對於高效和穩健的軟件開發至關重要,因為它們確保了資源的有效管理、同步的正確實現、錯誤的適當處理以及性能的優化,從而提升軟件的效率和可維護性。

Goexcelsinproductionduetoitsperformanceandsimplicity,butrequirescarefulmanagementofscalability,errorhandling,andresources.1)DockerusesGoforefficientcontainermanagementthroughgoroutines.2)UberscalesmicroserviceswithGo,facingchallengesinservicemanageme

我們需要自定義錯誤類型,因為標準錯誤接口提供的信息有限,自定義類型能添加更多上下文和結構化信息。 1)自定義錯誤類型能包含錯誤代碼、位置、上下文數據等,2)提高調試效率和用戶體驗,3)但需注意其複雜性和維護成本。

goisidealforbuildingscalablesystemsduetoitssimplicity,效率和建築物內currencysupport.1)go'scleansyntaxandaxandaxandaxandMinimalisticDesignenhanceProductivityAndRedCoductivityAndRedCuceErr.2)ItSgoroutinesAndInesAndInesAndInesAndineSandChannelsEnablenableNablenableNableNablenableFifficConcurrentscorncurrentprogragrammentworking torkermenticmminging

Initfunctionsingorunautomationbeforemain()andareusefulforsettingupenvorments和InitializingVariables.usethemforsimpletasks,避免使用輔助效果,andbecautiouswithTestingTestingTestingAndLoggingTomaintAnainCodeCodeCodeClarityAndTestesto。

goinitializespackagesintheordertheordertheyimported,thenexecutesInitFunctionswithinApcageIntheirdeFinityOrder,andfilenamesdetermineTheOrderAcractacractacrosmultiplefiles.thisprocessCanbeCanbeinepessCanbeInfleccessByendercrededBydeccredByDependenciesbetenciesbetencemendencenciesbetnependendpackages,whermayleLeadtocomplexinitialitialializizesizization


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中