Golang软件工程师(全栈/远程)职位招聘 @ United Internet
Golang软件工程师(全栈/远程)职位招聘 @ United Internet IONOS凭借其商业应用,是欧洲领先的主机和云应用提供商之一。我们凭借先进的技术,每天赢得来自许多不同国家的超过800万客户的信赖。
您的职责
1&1、IONOS、WEB.DE、GMX和MAIL.COM等品牌依赖于电子支付的可靠处理以及与相关后端系统的顺畅交互。
作为我们敏捷团队中的一名软件开发人员,您将开发并运营符合高安全标准的创新型支付和欺诈预防应用程序。作为一位称职的联络人,您将在项目流程中发挥积极作用,该流程紧跟当前技术趋势,跳出固有思维模式,并得益于日常的学习意愿。您将发挥您的创造力,同时不忽视客户的视角。我们正在为我们的专业团队寻找即时增援。您的职责包括:
- 使用REST API(Go 1.17+、Gin Gonic 1.8+、PHP 7/8)实现并进一步发展我们的应用验证和支付系统。
- 连接来自例如IONOS、United Internet、1&1和Web.de/GMX的业务系统。
- 为构建一个安全且高可用的系统做出贡献。您将与其他DevOps团队和外部服务提供商紧密合作。
- 通过自动化测试(单元测试和测试驱动开发)以及持续集成的整合,持续确保高质量标准。
- 根据跨职能团队中的项目情况,通过跨项目协作承担接口功能。
我们看重
您成功的基础是计算机科学大学学位或同等资质。您拥有扎实的面向对象软件开发经验,最好是在分布式Linux系统方面。您绝对需要具备的是对编程的热情。如果您符合以下条件,您将拥有最佳的先决条件:
- 您对Go和/或PHP以及面向服务的架构有良好的了解。
- 软件安全以及持续的责任感对您而言至关重要。
- 在支付环境/电子商务方面的经验以及对互联网技术的高度兴趣是一个优势(但非强制要求)。
- 了解关系型数据库(例如PostgreSQL)。
- 乐趣、高度的积极性和创造力将使您的个人资料更加完整。
更多关于Golang软件工程师(全栈/远程)职位招聘 @ United Internet的实战教程也可以访问 https://www.itying.com/category-94-b0.html
您好 Vanessa 和 Garry,
如果您对这份工作感兴趣,请通过申请链接提交申请。这是一份全职工作,要求在德国拥有永久居留权,任何申请者都应准备好搬迁。
此致, Pawel
更多关于Golang软件工程师(全栈/远程)职位招聘 @ United Internet的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你好 @pkuzak,
希望你一切顺利。
我很乐意承接你的需求。
请将你的需求详情通过我的邮箱发送给我:Vanessa.ci@talentsfromindia.com,以便我们进行讨论。
期待你的回复。
此致, Vanessa J Skype : Vanessa_12766
你好,
IONOS 的软件开发职位提供了一个令人兴奋的机会,可以参与使用 Go 和 PHP 开发创新的支付和欺诈预防应用程序。如果你对安全系统充满热情,并喜欢充满活力、协作的环境,那么这个职位可能非常适合你。
祝所有申请者好运!
这是一个非常典型的Go语言全栈开发职位,对技术栈的描述相当清晰。从职责和要求来看,团队主要使用Go 1.17+和Gin框架构建REST API,同时涉及PHP和分布式系统。
以下是基于职位描述中Go技术栈的具体示例:
1. Gin框架REST API实现示例:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type PaymentRequest struct {
Amount float64 `json:"amount" binding:"required"`
Currency string `json:"currency" binding:"required"`
UserID string `json:"user_id" binding:"required"`
}
func main() {
r := gin.Default()
// 支付验证端点
r.POST("/api/v1/payment/verify", func(c *gin.Context) {
var req PaymentRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// 业务逻辑:欺诈检测和验证
if isValid := validatePayment(req); !isValid {
c.JSON(http.StatusBadRequest, gin.H{"error": "Payment validation failed"})
return
}
c.JSON(http.StatusOK, gin.H{"status": "verified", "transaction_id": generateID()})
})
// 健康检查端点(高可用性要求)
r.GET("/health", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"status": "healthy", "service": "payment-api"})
})
r.Run(":8080")
}
func validatePayment(req PaymentRequest) bool {
// 实现实际的支付验证和欺诈检测逻辑
return req.Amount > 0 && req.Currency != ""
}
2. 自动化测试示例(单元测试):
package payment
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestPaymentValidation(t *testing.T) {
tests := []struct {
name string
amount float64
currency string
expected bool
}{
{"Valid payment", 100.0, "EUR", true},
{"Zero amount", 0.0, "USD", false},
{"Negative amount", -50.0, "GBP", false},
{"Empty currency", 100.0, "", false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
req := PaymentRequest{
Amount: tt.amount,
Currency: tt.currency,
UserID: "test-user",
}
result := validatePayment(req)
assert.Equal(t, tt.expected, result, "Validation failed for test case: %s", tt.name)
})
}
}
3. PostgreSQL集成示例:
package repository
import (
"context"
"database/sql"
_ "github.com/lib/pq"
)
type PaymentRepository struct {
db *sql.DB
}
func NewPaymentRepository(connStr string) (*PaymentRepository, error) {
db, err := sql.Open("postgres", connStr)
if err != nil {
return nil, err
}
return &PaymentRepository{db: db}, nil
}
func (r *PaymentRepository) SaveTransaction(ctx context.Context, tx *PaymentTransaction) error {
query := `
INSERT INTO transactions
(id, user_id, amount, currency, status, created_at)
VALUES ($1, $2, $3, $4, $5, NOW())
`
_, err := r.db.ExecContext(ctx, query,
tx.ID,
tx.UserID,
tx.Amount,
tx.Currency,
tx.Status,
)
return err
}
func (r *PaymentRepository) FindFraudulentPatterns(ctx context.Context, userID string) ([]FraudPattern, error) {
query := `
SELECT pattern_type, severity, detected_at
FROM fraud_patterns
WHERE user_id = $1 AND detected_at > NOW() - INTERVAL '24 hours'
`
rows, err := r.db.QueryContext(ctx, query, userID)
if err != nil {
return nil, err
}
defer rows.Close()
var patterns []FraudPattern
for rows.Next() {
var p FraudPattern
if err := rows.Scan(&p.PatternType, &p.Severity, &p.DetectedAt); err != nil {
return nil, err
}
patterns = append(patterns, p)
}
return patterns, nil
}
4. 安全中间件示例:
package middleware
import (
"github.com/gin-gonic/gin"
"net/http"
"strings"
)
func SecurityHeaders() gin.HandlerFunc {
return func(c *gin.Context) {
c.Header("X-Content-Type-Options", "nosniff")
c.Header("X-Frame-Options", "DENY")
c.Header("X-XSS-Protection", "1; mode=block")
c.Header("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
c.Next()
}
}
func APIAuthentication(apiKeys map[string]string) gin.HandlerFunc {
return func(c *gin.Context) {
authHeader := c.GetHeader("Authorization")
if authHeader == "" {
c.JSON(http.StatusUnauthorized, gin.H{"error": "Authorization header required"})
c.Abort()
return
}
parts := strings.Split(authHeader, "Bearer ")
if len(parts) != 2 {
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid authorization format"})
c.Abort()
return
}
apiKey := parts[1]
if _, valid := apiKeys[apiKey]; !valid {
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid API key"})
c.Abort()
return
}
c.Next()
}
}
这个职位要求的技术栈组合很实用:Go用于高性能API、PHP用于遗留系统集成、PostgreSQL用于数据持久化、Gin用于Web框架。支付和欺诈预防领域对代码质量和安全性有很高要求,这也是为什么职位描述中特别强调自动化测试和软件安全。

