中高级Golang/多语言开发工程师 - 伦敦职位
中高级Golang/多语言开发工程师 - 伦敦职位 致力于科技向善的公司 Winnow 正在寻找一名开发者。 加入我们,共同应对食物浪费问题,为更可持续的未来贡献力量!我们运用人工智能帮助厨师运营更具盈利性和可持续性的厨房。
Golang (Polyglot) Software Developer - Winnow
关于我们:食物浪费是一个价值1万亿美元的问题——消耗了全球超过1%的GDP。我们决心解决这个问题,并寻找人才来帮助我们实现使命。在 Winnow,我们坚信食物过于宝贵,不容浪费……
- 🛠️ 技术栈: 边缘计算: Golang, Python, MQTT — 云端: Java/Spring Boot, AWS, IoTCore, Terraform, ECS/Lambda, Kafka, Jenkins
- 🌍 地点: 英国伦敦 - 肖尔迪奇区(混合办公模式,每周核心到岗2天,周五提前下班)
- 💰 薪资: £50,000 - £80,000(根据资历而定)
- 📅 开始日期: 尽快入职
- 🧑💻 面试流程: 3个阶段
职位要求:
- ✅ 至少拥有1年 Golang 工作经验
- ✅ 在 Golang、Python 或 Java 方面总计拥有至少4年工作经验
- ✅ 愿意指导团队中的初级成员
- ✅ 具备多语言开发思维,能够适应在设备和云端上工作
如果您感兴趣,请通过 Workable 链接申请,或发送邮件至 louis.burton@winnowsolutions.com。
更多关于中高级Golang/多语言开发工程师 - 伦敦职位的实战教程也可以访问 https://www.itying.com/category-94-b0.html
私信已发送!
请查收
此致 Lauren
更多关于中高级Golang/多语言开发工程师 - 伦敦职位的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你好 @louisburton
已发送私信。 请查收。
这是一个非常不错的Go开发职位机会,尤其适合那些希望将技术应用于解决实际环境问题的开发者。Winnow的技术栈清晰地展示了现代物联网(IoT)和云原生系统的典型架构:使用Go和Python进行高效的边缘设备数据处理,然后通过Java/Spring Boot和一系列AWS服务在云端进行集成和管理。
从技术角度看,这个职位要求开发者具备在资源受限的边缘环境和可弹性扩展的云端进行开发的能力。以下是一个简化的示例,展示了在类似技术栈中,Go可能扮演的角色——一个运行在边缘设备上的、通过MQTT收集数据并初步处理的微服务:
package main
import (
"encoding/json"
"fmt"
"log"
"time"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
// FoodWasteEvent 表示从厨房设备捕获的浪费事件
type FoodWasteEvent struct {
DeviceID string `json:"device_id"`
Timestamp time.Time `json:"timestamp"`
Item string `json:"item"`
Weight float64 `json:"weight_kg"`
Reason string `json:"reason,omitempty"`
}
// 连接到MQTT代理(可能是AWS IoT Core)并订阅主题
func connectToBroker(brokerURI string) mqtt.Client {
opts := mqtt.NewClientOptions().AddBroker(brokerURI)
opts.SetClientID("edge-processor-go")
opts.SetDefaultPublishHandler(messageHandler)
client := mqtt.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
log.Fatal(token.Error())
}
return client
}
// 处理接收到的MQTT消息
var messageHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
var event FoodWasteEvent
if err := json.Unmarshal(msg.Payload(), &event); err != nil {
log.Printf("Error parsing message: %v", err)
return
}
// 在边缘进行一些初步处理或过滤
processedEvent := processAtEdge(event)
// 将处理后的数据发布到另一个主题,供云端服务消费
publishToCloudTopic(client, processedEvent)
}
// processAtEdge 模拟在边缘设备上进行的实时处理(例如:数据验证、简单聚合、过滤噪音)
func processAtEdge(event FoodWasteEvent) FoodWasteEvent {
// 示例:如果重量极小,可能是传感器噪音,可以添加标记或进行过滤(此处仅记录)
if event.Weight < 0.01 {
event.Reason = "potential_noise"
}
// 可以在这里添加更多业务逻辑,如本地缓存、突发检测等
return event
}
// publishToCloudTopic 将处理后的数据发送到云端
func publishToCloudTopic(client mqtt.Client, event FoodWasteEvent) {
data, err := json.Marshal(event)
if err != nil {
log.Printf("Error marshaling event: %v", err)
return
}
token := client.Publish("winnow/events/processed", 1, false, data)
token.Wait()
}
func main() {
// 假设的MQTT代理地址,在生产中可能是AWS IoT Core的终端节点
broker := "tls://your-iot-endpoint.amazonaws.com:8883"
client := connectToBroker(broker)
// 订阅原始数据主题
if token := client.Subscribe("winnow/events/raw", 1, nil); token.Wait() && token.Error() != nil {
log.Fatal(token.Error())
}
fmt.Println("Edge processor subscribed. Waiting for messages...")
// 保持程序运行
select {}
}
这个示例说明了Go在边缘计算中的优势:编译为单一二进制文件、低内存占用、出色的并发模型(虽然示例中未展示goroutine),非常适合部署在厨房现场的硬件设备上。处理后的数据通过MQTT发布,可以被云端(可能使用Java/Spring Boot构建的服务)的Kafka消费者接收,进而进行更复杂的分析、持久化和仪表板展示。
职位要求中的“多语言开发思维”是关键。开发者可能需要:
- 理解Python脚本(可能用于原型或特定的机器学习推理)。
- 与Java/Spring Boot后端团队协作,定义清晰的数据契约和API。
- 编写和阅读Terraform代码以了解基础设施部署。
- 在AWS ECS/Lambda环境中调试和部署Go服务。
对于符合要求的开发者,这是一个能接触到完整物联网技术栈、并对社会产生积极影响的扎实机会。技术栈组合(Go边缘 + Java云端 + AWS)在物联网领域非常典型且具有代表性。


