高薪招聘 - 高级Golang后端工程师
高薪招聘 - 高级Golang后端工程师 招聘💥 - 高级后端工程师(Go) 全职 - 远程
该职位的主要职责是设计、实施和运营 Syndica 的区块链基础设施平台。必须具备 Go 语言知识!团队秉承“编写即运行”的理念,每位工程师都需负责部署和运行自己编写的代码。
职责 🚀
- 设计、创建和配置基础设施
- 编写优雅、可维护的 Go 代码 - 地道的 Go 风格!
- 创建模块化且可扩展的微服务以支持平台
- 构建可靠、容错的服务
- 识别并排查从硬件、操作系统环境、网络到应用等多个部署层面的可用性和性能问题
- 评估性能趋势和预期,制定适当的可扩展性计划
- 排查并解决客户平台问题
- 确保在执行运维任务时满足服务等级协议
任职要求 🚀
- 拥有 3 年以上使用 Go 语言的相关专业经验。
- 有使用 Prometheus/Grafana 进行指标聚合/可视化的经验者优先。
- 有自动化工具/平台使用经验。
- 有告警和监控工具使用经验者优先。
- 有在高度分布式的公司工作经验者优先。
- 能够将部分工作时间与美国中部时区(UTC -6)的营业时间保持一致。
- 系统化的问题解决方法,同时具备强烈的责任心和驱动力。
- 对网络和网络协议及标准(HTTP, TLS, DNS 等)有一定的工作知识。
- 有编写自动化工具的经验,并热衷于“将所有事情自动化”。
- 拥有计算机科学或相关领域的学士学位,或具备同等相关经验。
如果您想了解更多关于该职位的信息,请随时给我发送消息。
谢谢!
更多关于高薪招聘 - 高级Golang后端工程师的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你好 @nathaly_estevez_llub 我已经给你发了私信,请查收。 谢谢
更多关于高薪招聘 - 高级Golang后端工程师的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你好, 希望你一切顺利!
我可以帮助你满足你的需求。
请通过 Skype live:lauren_8606 或电子邮件 lauren(at)cisinlabs(dot)com 联系我,以便我们可以进一步详细讨论此事。
谢谢, Lauren W.
根据招聘要求,这是一个对Go语言专业能力要求较高的高级后端职位,主要聚焦于区块链基础设施的构建与运维。以下从技术角度分析该职位所需的核心Go技能及相关示例:
1. 地道的Go代码风格与微服务架构 职位强调“地道的Go风格”,这通常指符合Go社区惯例的代码组织、错误处理、并发模型等。例如在微服务中正确使用接口、context和标准库:
// 示例:符合Go惯例的HTTP服务与错误处理
package main
import (
"context"
"errors"
"net/http"
"time"
)
type Service struct {
repo Repository
}
// 使用结构体方法而非全局函数
func (s *Service) GetBlock(ctx context.Context, id string) (*Block, error) {
if id == "" {
// 返回明确的错误类型
return nil, errors.New("invalid block id")
}
// 传递context以实现超时控制
block, err := s.repo.FindByID(ctx, id)
if err != nil {
return nil, fmt.Errorf("find block failed: %w", err) // 错误包装
}
return block, nil
}
// 符合Go习惯的HTTP处理器
func (s *Service) handleGetBlock(w http.ResponseWriter, r *http.Request) {
ctx, cancel := context.WithTimeout(r.Context(), 3*time.Second)
defer cancel()
id := r.URL.Query().Get("id")
block, err := s.GetBlock(ctx, id)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(block)
}
2. 可靠容错服务的实现模式 区块链基础设施需要高可用性,以下展示使用goroutine和channel实现容错处理的常见模式:
// 示例:带健康检查的容错服务
type HealthChecker struct {
checks []func() error
status chan bool
}
func (h *HealthChecker) Run(ctx context.Context) {
ticker := time.NewTicker(30 * time.Second)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return
case <-ticker.C:
healthy := true
for _, check := range h.checks {
if err := check(); err != nil {
log.Printf("health check failed: %v", err)
healthy = false
// 触发告警逻辑
go h.triggerAlert(err)
}
}
h.status <- healthy
}
}
}
// 使用select实现带超时的重试机制
func callWithRetry(ctx context.Context, fn func() error, maxRetries int) error {
for i := 0; i < maxRetries; i++ {
err := fn()
if err == nil {
return nil
}
select {
case <-ctx.Done():
return ctx.Err()
case <-time.After(time.Duration(i) * time.Second): // 指数退避
continue
}
}
return errors.New("max retries exceeded")
}
3. 监控与指标集成 Prometheus集成是明确要求,以下展示如何在Go服务中暴露指标:
// 示例:Prometheus指标收集
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var (
requestCounter = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "api_requests_total",
Help: "Total API requests",
},
[]string{"endpoint", "status"},
)
requestDuration = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "api_request_duration_seconds",
Help: "Request duration in seconds",
Buckets: prometheus.DefBuckets,
},
[]string{"endpoint"},
)
)
func init() {
prometheus.MustRegister(requestCounter)
prometheus.MustRegister(requestDuration)
}
// 在HTTP处理器中记录指标
func instrumentedHandler(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
recorder := &responseRecorder{w, 200}
next(recorder, r)
duration := time.Since(start).Seconds()
requestDuration.WithLabelValues(r.URL.Path).Observe(duration)
requestCounter.WithLabelValues(r.URL.Path, fmt.Sprint(recorder.status)).Inc()
}
}
// 单独暴露指标端点
http.Handle("/metrics", promhttp.Handler())
4. 基础设施自动化示例 职位要求“将所有事情自动化”,以下展示基础设施配置的Go实现:
// 示例:使用Go自动化基础设施配置
type NodeConfig struct {
ID string
Role string
Endpoints []string
}
type ConfigManager struct {
configs map[string]NodeConfig
mu sync.RWMutex
}
func (m *ConfigManager) ApplyConfig(ctx context.Context, cfg NodeConfig) error {
// 验证配置
if err := validateConfig(cfg); err != nil {
return fmt.Errorf("invalid config: %w", err)
}
m.mu.Lock()
defer m.mu.Unlock()
// 应用配置变更
old, exists := m.configs[cfg.ID]
m.configs[cfg.ID] = cfg
// 触发配置更新
if exists && !configsEqual(old, cfg) {
go m.notifyConfigChange(ctx, old, cfg)
}
return nil
}
// 使用模板生成配置文件
func generateConfigTemplate(cfg NodeConfig) (string, error) {
tmpl := `node_id: {{.ID}}
role: {{.Role}}
endpoints:
{{- range .Endpoints}}
- {{.}}
{{- end}}`
t, err := template.New("config").Parse(tmpl)
if err != nil {
return "", err
}
var buf bytes.Buffer
if err := t.Execute(&buf, cfg); err != nil {
return "", err
}
return buf.String(), nil
}
该职位需要候选人深入理解Go的并发模型、错误处理哲学和性能优化,同时具备将运维需求转化为可靠Go代码的能力。区块链基础设施的特殊性还要求对网络协议、分布式系统有扎实理解,上述代码示例展示了部分关键技术点的实现方式。

