Golang架构师/技术主管职位招聘(远程或俄罗斯)
Golang架构师/技术主管职位招聘(远程或俄罗斯) 我们正在启动一个新项目:为 CrescoFin 开发 DeFi 银行应用。你可以在 crescofin.ch 了解更多信息。
CrescoFin 是一家受监管的瑞士银行替代方案公司,提供简单的产品:一个受保的、计息的存款账户(支持法币和加密货币,正在开发中),其年化收益率高于银行。我们正在寻找一位经验丰富的技术负责人/架构师。
职责
从零开始构建一个新的银行应用——我们有一个全新的项目!
- 管理一个约 6-7 名开发人员的开发团队
- 与其他高级工程师和技术经验丰富的产品负责人共同构建架构
- 将我们的设计转化为 Android 和 IOS 应用
创建和维护由我们 API 驱动的 React 前端
- 移动端 (Android/IOS)
- Web 应用
创建和维护 Go 语言后端
- 管理与不同银行合作伙伴的集成
- 管理与不同合规合作伙伴的集成
- 在瑞士的服务器上安全存储敏感数据
与一个小而专注的团队协作、规划和沟通
将以太坊区块链上的 DeFi 应用集成到我们的应用中(有高级工程师支持)
与产品负责人密切合作,支持他和各位总监
要求
- 具备创业心态和实干精神
- 有 React Native 项目经验
- 有 Go 语言项目经验
- 值得信赖,并知道如何安全地设置核心基础设施
- 喜欢与强大的团队一起启动新项目
- 对设计实现有敏锐的眼光
- 熟练掌握英语
- 积极主动,善于沟通
- 有幽默感
- 对软件开发充满热情
- 加分项:了解加密货币和 DeFi
- 加分项:有 Solidity 和以太坊区块链经验
- 加分项:有 DevOps 经验
我们提供
- 月薪 5000 - 6000 美元,如果您在金融科技领域有专家经验,薪资可更高
- 充满活力、不断成长的组织
- 为长期员工提供股票期权
- 有竞争力的薪酬
- 与其他优秀的开发者共事
- 志在改变世界的加密货币原生同事!
更多关于Golang架构师/技术主管职位招聘(远程或俄罗斯)的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你好,
我想为你提供帮助,已发送私信,请查收。
此致! Seth R
更多关于Golang架构师/技术主管职位招聘(远程或俄罗斯)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个极具吸引力的Go技术负责人/架构师职位,尤其适合对金融科技和DeFi有深厚兴趣的开发者。从技术要求来看,Go后端将是整个系统的核心,负责处理银行集成、合规性以及敏感数据的安全存储。以下是一些针对Go技术栈的专业分析和示例:
1. Go后端架构核心考量 对于银行级应用,Go的后端架构需要重点关注安全性、并发处理和API设计。以下是一个基础的项目结构示例和关键包的使用:
// cmd/api/main.go - 应用入口点
package main
import (
"log"
"net/http"
"os"
"github.com/gorilla/mux"
"your-project/internal/banking"
"your-project/internal/compliance"
"your-project/internal/blockchain"
"your-project/pkg/middleware"
)
func main() {
r := mux.NewRouter()
// 安全中间件链
r.Use(middleware.Authentication)
r.Use(middleware.RateLimit)
r.Use(middleware.SecurityHeaders)
// 银行集成端点
bankingAPI := banking.NewAPI()
r.HandleFunc("/api/v1/accounts", bankingAPI.GetAccounts).Methods("GET")
r.HandleFunc("/api/v1/transfers", bankingAPI.CreateTransfer).Methods("POST")
// 合规性检查端点
complianceAPI := compliance.NewService()
r.HandleFunc("/api/v1/kyc/verify", complianceAPI.VerifyCustomer).Methods("POST")
// 区块链集成端点
blockchainAPI := blockchain.NewEthereumClient()
r.HandleFunc("/api/v1/defi/balance", blockchainAPI.GetBalance).Methods("GET")
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
log.Printf("Server starting on port %s", port)
log.Fatal(http.ListenAndServe(":"+port, r))
}
2. 银行集成模块示例 与银行API集成时需要处理重试、超时和错误处理:
// internal/banking/integration.go
package banking
import (
"context"
"time"
"github.com/sony/gobreaker"
)
type BankClient struct {
httpClient *http.Client
circuitBreaker *gobreaker.CircuitBreaker
baseURL string
apiKey string
}
func NewBankClient(baseURL, apiKey string) *BankClient {
cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "BankAPI",
MaxRequests: 5,
Interval: 60 * time.Second,
Timeout: 30 * time.Second,
ReadyToTrip: func(counts gobreaker.Counts) bool {
return counts.ConsecutiveFailures > 5
},
})
return &BankClient{
httpClient: &http.Client{
Timeout: 10 * time.Second,
},
circuitBreaker: cb,
baseURL: baseURL,
apiKey: apiKey,
}
}
func (c *BankClient) CreateTransfer(ctx context.Context, transfer *Transfer) error {
// 使用断路器模式执行银行API调用
_, err := c.circuitBreaker.Execute(func() (interface{}, error) {
req, err := http.NewRequestWithContext(ctx, "POST",
c.baseURL+"/transfers",
bytes.NewBuffer(transfer.ToJSON()))
if err != nil {
return nil, err
}
req.Header.Set("Authorization", "Bearer "+c.apiKey)
req.Header.Set("Content-Type", "application/json")
resp, err := c.httpClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("bank API error: %s", resp.Status)
}
return nil, nil
})
return err
}
3. 敏感数据安全存储 在瑞士服务器上存储敏感数据需要严格的加密措施:
// pkg/security/encryption.go
package security
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/base64"
"io"
)
type Encryptor struct {
key []byte
}
func NewEncryptor(key string) (*Encryptor, error) {
// 确保密钥长度为32字节(AES-256)
hash := sha256.Sum256([]byte(key))
return &Encryptor{key: hash[:]}, nil
}
func (e *Encryptor) Encrypt(plaintext []byte) (string, error) {
block, err := aes.NewCipher(e.key)
if err != nil {
return "", err
}
gcm, err := cipher.NewGCM(block)
if err != nil {
return "", err
}
nonce := make([]byte, gcm.NonceSize())
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
return "", err
}
ciphertext := gcm.Seal(nonce, nonce, plaintext, nil)
return base64.StdEncoding.EncodeToString(ciphertext), nil
}
func (e *Encryptor) Decrypt(encrypted string) ([]byte, error) {
data, err := base64.StdEncoding.DecodeString(encrypted)
if err != nil {
return nil, err
}
block, err := aes.NewCipher(e.key)
if err != nil {
return nil, err
}
gcm, err := cipher.NewGCM(block)
if err != nil {
return nil, err
}
nonceSize := gcm.NonceSize()
if len(data) < nonceSize {
return nil, fmt.Errorf("ciphertext too short")
}
nonce, ciphertext := data[:nonceSize], data[nonceSize:]
return gcm.Open(nil, nonce, ciphertext, nil)
}
4. 区块链集成示例 与以太坊DeFi协议集成:
// internal/blockchain/ethereum.go
package blockchain
import (
"context"
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
type EthereumClient struct {
client *ethclient.Client
chainID *big.Int
}
func NewEthereumClient(rpcURL string) (*EthereumClient, error) {
client, err := ethclient.Dial(rpcURL)
if err != nil {
return nil, err
}
chainID, err := client.ChainID(context.Background())
if err != nil {
return nil, err
}
return &EthereumClient{
client: client,
chainID: chainID,
}, nil
}
func (ec *EthereumClient) GetTokenBalance(ctx context.Context,
walletAddress common.Address,
tokenAddress common.Address) (*big.Int, error) {
// ERC20代币余额查询
instance, err := NewERC20(tokenAddress, ec.client)
if err != nil {
return nil, err
}
balance, err := instance.BalanceOf(&bind.CallOpts{
Context: ctx,
}, walletAddress)
return balance, err
}
func (ec *EthereumClient) ExecuteDefiTransaction(ctx context.Context,
privateKey string,
contractAddress common.Address,
method string,
args ...interface{}) (common.Hash, error) {
// 构建交易并发送到DeFi合约
auth, err := bind.NewKeyedTransactorWithChainID(
crypto.ToECDSA(common.FromHex(privateKey)),
ec.chainID)
if err != nil {
return common.Hash{}, err
}
// 这里需要根据具体的DeFi合约ABI进行调用
// 示例:与Uniswap或Aave等协议的交互
return common.Hash{}, nil
}
5. 并发处理模式 银行应用需要高效处理并发请求:
// internal/processor/concurrent.go
package processor
import (
"context"
"sync"
"time"
)
type BatchProcessor struct {
workers int
batchSize int
timeout time.Duration
}
func NewBatchProcessor(workers, batchSize int, timeout time.Duration) *BatchProcessor {
return &BatchProcessor{
workers: workers,
batchSize: batchSize,
timeout: timeout,
}
}
func (bp *BatchProcessor) ProcessTransactions(ctx context.Context,
transactions []Transaction) []Result {
results := make([]Result, len(transactions))
var wg sync.WaitGroup
semaphore := make(chan struct{}, bp.workers)
for i, tx := range transactions {
wg.Add(1)
go func(idx int, transaction Transaction) {
defer wg.Done()
semaphore <- struct{}{}
defer func() { <-semaphore }()
ctx, cancel := context.WithTimeout(ctx, bp.timeout)
defer cancel()
// 处理交易逻辑
result := bp.processSingleTransaction(ctx, transaction)
results[idx] = result
}(i, tx)
}
wg.Wait()
return results
}
func (bp *BatchProcessor) processSingleTransaction(ctx context.Context,
tx Transaction) Result {
// 实现具体的交易处理逻辑
// 包括银行API调用、合规检查、区块链操作等
return Result{}
}
这个职位要求的技术栈非常全面,Go后端需要处理银行集成、合规性、区块链交互和安全数据存储等多个关键领域。上述示例展示了如何构建一个安全、可扩展的Go后端架构,适合处理金融科技应用的高并发和高安全性需求。

