高薪招聘:Golang远程高级后端开发工程师
高薪招聘:Golang远程高级后端开发工程师
关于 Around
我们正在构建一个现代化平台,旨在改变快速消费品(CPG)行业公司的运营和增长方式。我们的目标是简化产品在全球市场中的展示、共享和销售流程。我们已完成了最小可行产品(MVP)阶段,尚未产生收入,目前正快速推进以吸纳早期用户,并塑造该行业的未来。
职位描述
我们正在寻找一位后端开发负责人,作为创始团队成员加入我们雄心勃勃的早期初创公司。如果你对主导我们后端架构的持续开发和战略规划、做出高层技术决策,并在重大事业的起步阶段就参与其中感到兴奋——我们期待与你交流。
核心职责
- 扩展和改进我们现有的代码库
- 做出良好的后端架构和代码级决策
- 管理部署流水线和 AWS 基础设施
- 通过快速迭代支持产品开发
- 与团队其他成员合作,为用户交付真正的价值
技术栈
- Go (Golang) – 主要后端语言
GraphQL – API 层
- PostgreSQL & CockroachDB
- Liquibase – 数据库迁移工具
- AWS – 托管和基础设施
关键任职资格
- 拥有技术负责人的实际经验。
- 精通 GoLang。
- 深刻理解 AWS 服务和云架构。
- 出色的解决问题能力和沟通技巧。
薪酬待遇
我们目前尚未产生收入,因此该职位暂时仅提供股权。话虽如此,我们正在积极从多个渠道寻求融资,并承诺一旦资金开始流入,将立即启动薪资发放。现在加入意味着作为真正的早期团队成员,拥有有意义的股权——并随着我们过渡到获得融资和产生收入的阶段,与我们共同成长。
感兴趣吗?
如需申请,请在此处提交您的简历以及您的工作 GitHub/LinkedIn 链接:Around 后端开发负责人。
更多关于高薪招聘:Golang远程高级后端开发工程师的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你好,
我很乐意为你提供帮助。
私信已发送。
更多关于高薪招聘:Golang远程高级后端开发工程师的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我们目前处于营收前阶段,因此这个职位目前只提供股权。
抱歉,但这并不是一份工作。这是一个错误。
Lead Backend Developer
这个职位名称也是错误的。技术负责人负责定义技术栈。你们要找的是一位普通的有经验的开发者。
这是一个非常典型的早期初创公司技术负责人职位,核心是寻找一位能从零到一构建并主导技术方向的联合创始人级别的工程师。对于精通Go的开发者来说,这既是高风险高回报的机会,也是对技术领导力的全面考验。
以下从技术角度,针对其职责和技术栈,分析这个职位对Go开发者的核心要求,并附上相关的代码示例,以展示他们可能期望的代码质量和技术决策水平。
1. 主导后端架构与Go代码质量
职位要求“做出良好的后端架构和代码级决策”。这意味着不仅要用Go写功能,更要建立可维护、可测试、可扩展的代码规范。
示例:清晰的接口定义与依赖注入 他们期望的代码结构应该便于测试和替换,而不是紧耦合的。
// 定义清晰的接口(在 internal/user/repository.go 中)
package repository
import "context"
type UserRepository interface {
FindByID(ctx context.Context, id string) (*User, error)
Save(ctx context.Context, user *User) error
}
// 实现(在 internal/user/postgres_repository.go 中)
type PostgresUserRepository struct {
db *sql.DB
}
func (r *PostgresUserRepository) FindByID(ctx context.Context, id string) (*User, error) {
// 具体的数据库查询逻辑
row := r.db.QueryRowContext(ctx, "SELECT id, name, email FROM users WHERE id = $1", id)
// ... 解析row到User结构体
return &user, nil
}
// 在服务层通过接口使用(在 internal/user/service.go 中)
type UserService struct {
repo repository.UserRepository
}
func NewUserService(repo repository.UserRepository) *UserService {
return &UserService{repo: repo}
}
func (s *UserService) GetUser(ctx context.Context, id string) (*User, error) {
// 业务逻辑,易于单元测试(可以mock repository)
return s.repo.FindByID(ctx, id)
}
2. 构建可扩展的GraphQL API层
技术栈明确使用GraphQL作为API层。负责人需要设计高效的GraphQL Schema和Resolver。
示例:使用gqlgen构建类型安全的GraphQL Resolver
gqlgen是Go生态中构建GraphQL服务器的流行选择,它通过生成类型安全的代码来提升开发体验和可靠性。
// 在 graph/schema.graphqls 中定义Schema
type User {
id: ID!
name: String!
email: String!
}
type Query {
user(id: ID!): User
}
// gqlgen 会自动生成对应的Go结构体和接口
// 在 graph/resolver.go 中实现Resolver
package graph
import (
"context"
"your_project/internal/user"
)
type Resolver struct {
UserService *user.Service
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) {
// 调用服务层
u, err := r.UserService.GetUser(ctx, id)
if err != nil {
return nil, err
}
// 将领域模型转换为GraphQL模型
return &model.User{
ID: u.ID,
Name: u.Name,
Email: u.Email,
}, nil
}
3. 管理AWS基础设施与部署流水线
“管理部署流水线和AWS基础设施”要求将Go应用高效、可靠地部署到云上。这通常意味着使用基础设施即代码(IaC)和容器化。
示例:使用Terraform定义核心AWS资源(如ECS Fargate) 虽然这不是Go代码,但作为技术负责人,需要能编写和维护此类配置。
# main.tf
resource "aws_ecs_cluster" "main" {
name = "around-api-cluster"
}
resource "aws_ecs_task_definition" "api" {
family = "around-api"
cpu = "256"
memory = "512"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
execution_role_arn = aws_iam_role.ecs_task_execution_role.arn
container_definitions = jsonencode([{
name = "around-api"
image = "${aws_ecr_repository.main.repository_url}:latest"
portMappings = [{
containerPort = 8080
hostPort = 8080
}]
environment = [
{ name = "DATABASE_URL", value = var.database_url }
]
logConfiguration = {
logDriver = "awslogs"
options = {
"awslogs-group" = "/ecs/around-api"
"awslogs-region" = var.aws_region
"awslogs-stream-prefix" = "ecs"
}
}
}])
}
对应的Go应用需要优雅处理启动和关闭,以适配容器化环境:
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
// 初始化路由、数据库连接等
router := setupRouter()
srv := &http.Server{
Addr: ":8080",
Handler: router,
}
// 优雅关机
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("Shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatal("Server forced to shutdown:", err)
}
// 清理其他资源,如数据库连接池
log.Println("Server exiting")
}
4. 数据库迁移与数据层设计
使用PostgreSQL/CockroachDB和Liquibase,要求负责人能设计稳健的数据模式并管理其变更。
示例:在Go项目中组织Liquibase迁移 项目结构需要清晰分离SQL迁移文件和应用程序代码。
project-root/
├── migrations/
│ ├── changelog.xml # Liquibase主变更日志
│ └── changes/
│ ├── 001-initial-schema.sql
│ └── 002-add-user-email-index.sql
├── internal/
│ └── user/
│ ├── repository.go
│ └── postgres_repository.go
└── go.mod
在001-initial-schema.sql中:
-- liquibase formatted sql
-- changeset your_name:001
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- rollback DROP TABLE users;
总结
这个职位远非普通的Go开发岗位。它要求候选人:
- 架构能力:用Go设计松耦合、可测试的微服务或单体应用。
- 全栈运维:从GraphQL API设计到AWS基础设施即代码(可能用Terraform或CDK),再到CI/CD流水线(如GitHub Actions)。
- 数据建模:设计关系型数据库模式,并用Liquibase等工具安全地管理变更。
- 领导力:建立代码规范、评审流程,并指导可能加入的其他后端工程师。
对于符合条件的Go开发者,这是一个能深度塑造技术栈和产品方向的机会。但“仅提供股权”的现状要求候选人必须有强烈的风险共担意识和对创业公司不确定性的承受能力。申请者需要准备好展示其过往在技术决策、系统设计和Go项目领导力方面的具体成果,而不仅仅是编码技能。

