Golang新项目创意求推荐

Golang新项目创意求推荐 你好, 我使用 Go 语言编程大约有三年了,但一直没有机会学习服务器、gRPC 和微服务相关的知识。

有人能想到一些可以作为“作业”来创建的项目吗?这些项目应该能帮助我学习这些领域的知识。

谢谢

2 回复

虽然与你正在讨论的内容没有直接关系,但仍有一定关联,并且使用的是较旧的协议。如果你还没有遇到更好的想法,可以考虑一下。

这个项目还需要改进,以增加缺失的功能和修复错误…

GitHub

daluu/gorrs

使用 Go 语言实现的通用 Robot Framework 远程库服务器 - daluu/gorrs

更多关于Golang新项目创意求推荐的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


以下是一个结合服务器、gRPC和微服务的完整项目方案,适合作为学习作业:

项目名称:分布式任务调度系统

项目架构:

  1. API网关服务(HTTP/JSON + gRPC)
  2. 任务管理服务(gRPC微服务)
  3. 工作节点服务(gRPC微服务)
  4. 服务发现与注册(Consul/etcd)

核心代码示例:

1. gRPC服务定义(protobuf):

// task.proto
syntax = "proto3";

package task;

service TaskService {
    rpc CreateTask(CreateTaskRequest) returns (TaskResponse);
    rpc GetTask(GetTaskRequest) returns (TaskResponse);
    rpc ListTasks(ListTasksRequest) returns (stream TaskResponse);
}

message CreateTaskRequest {
    string name = 1;
    string command = 2;
    int32 timeout = 3;
}

message TaskResponse {
    string id = 1;
    string status = 2;
    string result = 3;
}

2. gRPC服务端实现:

// task_service.go
package main

import (
    "context"
    "log"
    "net"
    
    "google.golang.org/grpc"
    pb "yourproject/task"
)

type taskServer struct {
    pb.UnimplementedTaskServiceServer
    tasks map[string]*pb.TaskResponse
}

func (s *taskServer) CreateTask(ctx context.Context, req *pb.CreateTaskRequest) (*pb.TaskResponse, error) {
    task := &pb.TaskResponse{
        Id:     generateID(),
        Status: "pending",
    }
    s.tasks[task.Id] = task
    return task, nil
}

func main() {
    lis, err := net.Listen("tcp", ":50051")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    
    s := grpc.NewServer()
    pb.RegisterTaskServiceServer(s, &taskServer{})
    
    log.Printf("server listening at %v", lis.Addr())
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

3. HTTP网关(使用grpc-gateway):

// gateway.go
package main

import (
    "context"
    "net/http"
    
    "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
    "google.golang.org/grpc"
    pb "yourproject/task"
)

func main() {
    ctx := context.Background()
    mux := runtime.NewServeMux()
    
    opts := []grpc.DialOption{grpc.WithInsecure()}
    err := pb.RegisterTaskServiceHandlerFromEndpoint(ctx, mux, "localhost:50051", opts)
    if err != nil {
        panic(err)
    }
    
    http.ListenAndServe(":8080", mux)
}

4. 工作节点微服务:

// worker.go
package main

import (
    "context"
    "os/exec"
    "time"
    
    pb "yourproject/task"
)

type Worker struct {
    pb.UnimplementedWorkerServiceServer
}

func (w *Worker) ExecuteTask(ctx context.Context, task *pb.Task) (*pb.TaskResult, error) {
    ctx, cancel := context.WithTimeout(ctx, time.Duration(task.Timeout)*time.Second)
    defer cancel()
    
    cmd := exec.CommandContext(ctx, "sh", "-c", task.Command)
    output, err := cmd.CombinedOutput()
    
    return &pb.TaskResult{
        TaskId: task.Id,
        Output: string(output),
        Error:  err.Error(),
    }, nil
}

5. 服务注册与发现:

// registry.go
package main

import (
    "github.com/hashicorp/consul/api"
)

func registerService(serviceName string, port int) error {
    config := api.DefaultConfig()
    client, err := api.NewClient(config)
    if err != nil {
        return err
    }
    
    registration := &api.AgentServiceRegistration{
        ID:      serviceName + "-1",
        Name:    serviceName,
        Port:    port,
        Address: "localhost",
    }
    
    return client.Agent().ServiceRegister(registration)
}

项目扩展功能:

  1. 添加任务队列(使用Redis或RabbitMQ)
  2. 实现负载均衡
  3. 添加监控和日志收集(Prometheus + Grafana)
  4. 实现分布式锁
  5. 添加认证和授权(JWT)
  6. 容器化部署(Docker + Kubernetes)

这个项目涵盖了gRPC服务定义、双向流通信、HTTP/gRPC网关、服务发现、上下文传递、超时控制等核心概念。通过实现这个系统,可以全面学习Go语言在微服务架构中的应用。

回到顶部