Go-zero는 RPC, 캐싱, 예약된 작업 및 기타 기능을 포함한 완전한 솔루션 세트를 제공하는 뛰어난 Go 언어 프레임워크입니다. 실제로 go-zero를 사용하면 고성능 서비스를 구축하는 것은 매우 간단하며, 심지어 몇 시간 안에 초보자부터 숙련자까지 갈 수 있습니다.
이 글의 목적은 Go-Zero 프레임워크를 사용하여 고성능 서비스를 구축하는 과정을 소개하고 독자가 프레임워크의 핵심 개념을 빠르게 이해할 수 있도록 돕는 것입니다.
1. 설치 및 구성
고제로를 사용하기 전에 먼저 설치하고 필요한 환경을 구성해야 합니다.
1. 설치
go-zero 설치는 매우 간단합니다. 다음 명령을 실행하면 됩니다.
$ go get -u github.com/tal-tech/go-zero
그러면 GitHub에서 최신 버전의 go-zero가 자동으로 다운로드됩니다. 하지만 Go 1.13 이상을 사용하는 것이 좋습니다.
2. 구성
고제로를 사용하기 전에 필요한 환경을 구성해야 합니다. 특히 go-zero를 사용하여 서비스를 생성하려면 goctl 명령줄 도구를 설치해야 합니다.
$ GO111MODULE=on go get -u github.com/tal-tech/go-zero/tools/goctl
3. 프로젝트 생성
다음으로 goctl을 사용하여 새 프로젝트를 생성해야 합니다. 프로젝트 이름은 blog이고 다음 명령으로 생성할 수 있다고 가정합니다.
$ mkdir blog $ cd blog $ go mod init blog $ goctl api new blog
위 명령은 새 API 프로젝트를 생성하고 필요한 파일과 디렉터리를 생성합니다.
2. 서비스 만들기
다음으로 go-zero를 사용하여 새로운 서비스를 만들 수 있습니다. 서비스 이름은 user-service이며 다음 단계를 통해 생성할 수 있다고 가정합니다.
1. 서비스 생성
goctl을 사용하여 user-service의 서비스 코드 생성:
$ goctl api go -api user.api -dir .
위 명령은 사용자를 생성합니다. user-service의 서비스 코드가 포함된 user.go라는 파일이 포함된 현재 디렉터리의 디렉터리입니다.
2. 핸들러 구현
또한 특정 비즈니스 로직인 핸들러를 구현해야 합니다.
먼저 사용자 디렉터리 아래에 handler라는 새 디렉터리를 만들고 그 안에 userhandler.go라는 파일을 만들어야 합니다. 이 파일에는 핸들러 코드가 포함됩니다.
userhandler.go 코드는 다음과 같습니다.
package handler import ( "net/http" "github.com/tal-tech/go-zero/rest/httpx" "blog/service/user/api/internal/logic" "blog/service/user/api/internal/svc" ) func userHandler(ctx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { req, err := httpx.NewRequest(r) if err != nil { httpx.WriteError(w, err) return } l := logic.NewUserLogic(r.Context(), ctx) resp, err := l.GetUser(req) if err != nil { httpx.WriteError(w, err) return } httpx.WriteJson(w, resp) } }
위 코드는 go-zero에서 제공하는 Rest/httpx 패키지를 사용합니다. 이는 NewRequest, WriteError, WriteJSON 등과 같은 몇 가지 편리한 기능을 제공하여 HTTP 서비스를 단순화합니다. 글쓰기 과정.
3. 핸들러 등록
이제 위의 핸들러 프로그램을 서비스에 등록해야 합니다.
user.go 파일의 init 메소드에 다음 코드를 추가합니다.
func (s *Service) InitHandlers() { s.UserHandler = http.HandlerFunc(handler.UserHandler(s.Context)) }
위 코드는 userHandler 함수를 HTTP 서비스로 등록하며, API 파일에 경로를 정의하여 이 서비스에 액세스할 수 있습니다.
3. 템플릿 만들기
goctl create api를 통해 새로운 go-zero API를 생성할 수 있으며, 이는 일부 초기화 구성이 포함된 폴더를 자동으로 생성합니다. goctl의 요구 사항에 따라 자체 컨트롤러와 서비스를 추가할 수 있습니다.
여기에서는 go-zero의 소스 코드를 읽는 방법을 더 잘 배울 수 있는 템플릿 애플리케이션을 만듭니다. 애플리케이션에는 go-zero의 일반적인 기능을 사용하는 방법을 보여주는 CRUD 예제가 포함되어 있습니다.
1. 템플릿 생성
goctl을 사용하여 go-zero의 소스 코드를 더 잘 학습할 수 있는 템플릿 애플리케이션을 생성할 수 있습니다.
$ goctl api template -o app.go
위 명령은 템플릿 애플리케이션의 모든 소스 코드가 포함된 app.go라는 파일을 생성합니다.
2. 데이터 액세스 구현
데이터 저장에는 MySQL이 사용된다고 가정합니다. 시작하기 전에 MySQL을 설치하고 구성해야 합니다. 이를 기반으로 go-zero에서 제공하는 go-sql을 사용하여 데이터베이스 액세스 계층을 구축할 수 있습니다.
구체적으로 goctl을 사용하여 데이터 액세스 계층 코드를 생성할 수 있습니다.
$ goctl model mysql datasource "root:123456@tcp(127.0.0.1:3306)/test" -table user -dir .
위 명령은 데이터 액세스를 위한 사용자 데이터 모델이 포함된 userModel.go 파일을 생성합니다.
3. 비즈니스 로직 구현
다음으로 비즈니스 로직을 구현하고 이를 데이터 액세스 계층과 함께 사용해야 합니다. 특히, 사용자 관리를 위한 비즈니스 로직이 포함된 userLogic.go라는 파일을 생성할 수 있습니다.
userLogic.go 코드는 다음과 같습니다.
package logic import ( "context" "github.com/tal-tech/go-zero/core/logx" "github.com/tal-tech/go-zero/core/stores/sqlx" "blog/service/user/model" "blog/service/user/api/internal/svc" "blog/service/user/api/internal/types" ) type UserLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) UserLogic { return UserLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *UserLogic) GetUser(req types.GetUserRequest) (*types.GetUserResponse, error) { //Todo }
위 코드에서 우리는 sqlx, Stores 및 logx 패키지를 소개했습니다. 여기서 sqlx는 go-zero 프레임워크의 일부이며 특별히 데이터베이스 작업에 사용됩니다. Stores는 Go-Zero 프레임워크의 데이터 저장 계층입니다. logx 패키지는 go-zero 프레임워크에서 제공하는 로깅 라이브러리로, 중요한 이벤트를 기록하는 데 도움이 될 수 있습니다.
4. ETCD 등 통합
go-zero 프레임워크를 사용하면 ETCD, Redis, ZooKeeper 등과 같이 일반적으로 사용되는 일부 도구 및 서비스를 쉽게 통합할 수 있습니다. 구체적으로, 코드에서 go-zero가 제공하는 관련 라이브러리를 가져오고 구성 파일에서 관련 정보를 구성할 수 있습니다.
일반적으로 사용되는 통합 방법은 다음과 같습니다.
1. ETCD 통합
먼저 구성 파일에 다음 정보를 추가합니다.
[etcd] host = "localhost:2379"
그런 다음 ETCD를 사용하려는 코드에서 clientv3.New 함수를 사용합니다. 새로운 etcd 클라이언트를 생성합니다.
import ( "go.etcd.io/etcd/clientv3" ) client, err := clientv3.New(clientv3.Config{ Endpoints: []string{"localhost:2379"}, DialTimeout: 5 * time.Second, }) if err != nil { panic(err) }
위 코드는 localhost:2379를 ETCD 서버의 주소로 사용하는 client라는 ETCD 클라이언트를 생성합니다.
2. Redis 통합
Redis를 사용하려면 구성 파일에 다음 정보를 추가해야 합니다.
[redis] host = "localhost:6379" password = "" db = 0
그런 다음 Redis를 사용하려는 코드에서 redis.NewClient 함수를 사용하여 새로운 Redis를 생성합니다. 고객.
import ( "github.com/go-redis/redis" ) client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB })
위 코드는 localhost:6379를 Redis 서버 주소로 사용하고 비밀번호는 사용하지 않으며 기본 DB를 사용하는 새로운 Redis 클라이언트를 생성합니다.
3. ZooKeeper 통합
要使用ZooKeeper,我们需要在配置文件中添加以下信息:
[zookeeper] host = "localhost:2181"
然后,在要使用ZooKeeper的代码中,使用zk.Connect函数创建一个新的ZooKeeper客户端。
import ( "github.com/samuel/go-zookeeper/zk" "time" ) conn, _, err := zk.Connect([]string{"localhost:2181"}, time.Second*5) if err != nil { panic(err) }
上述代码将创建一个名为conn的ZooKeeper客户端,它将使用localhost:2181作为ZooKeeper服务器的地址。
五、总结
到目前为止,我们已经深入了解了go-zero框架,并学到了如何使用它来构建高性能服务。
总结一下,要使用go-zero,请先安装和配置相关环境,然后创建一个新的项目,通过goctl命令行工具自动生成模板代码和配置文件。
接着,可以使用go-zero提供的各种功能和服务来逐步完善和扩展我们的应用程序,如集成数据库、ETCD、Redis等。
将go-zero框架用于您的下一个项目吧,它将使您能够构建出更加灵活、高效和可靠的服务!
위 내용은 입문부터 숙련까지: 제로 제로 프레임워크 마스터하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!