Golang后端工程师岗位 - 合成生物学API开发@Serotiny

Golang后端工程师岗位 - 合成生物学API开发@Serotiny 我们在Serotiny从事基因疗法设计。我们构建了一个具有生物感知能力的API,将基因工程从纯粹的艺术创作转变为工程学科。我们的软件成果最终会物理编译成全新的DNA序列,这些序列在人体细胞内进一步编译成新型蛋白质,帮助治疗遗传疾病或协助免疫系统攻击癌细胞。

职位描述 该职位将主导开发Serotiny的生物感知API,与生物学家合作部署用于新蛋白质设计的创新算法。

数字基础设施是设计/构建/测试循环的一部分,将精密调校的软件架构与湿实验室哺乳动物合成生物学相结合。Serotiny正在寻找首位后端开发工程师,期待为合成生物学设计创新的软件架构。

岗位职责

  • 与生物学家合作定义并设计定制化生物感知API
  • 在新颖数据结构上探索机器学习及其他约束求解策略
  • 我们目前使用Go语言和Ember框架

任职要求

  • 3年以上行业专业经验
  • 掌握Go语言开发
  • 具备API集成经验
  • 拥有数字产品交付经验
  • 具备灵活性及在初创企业早期阶段工作的意愿

福利待遇

  • 全额健康保险
  • 举办和参加开发者活动的专项预算
  • 开发并发布合成生物学开源标准的机会
  • 架构和部署新型生物数据结构的机遇

薪资范围:10-15万美元+股权

https://serotiny.bio/careers/ jobs@serotiny.bio


更多关于Golang后端工程师岗位 - 合成生物学API开发@Serotiny的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang后端工程师岗位 - 合成生物学API开发@Serotiny的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


以下是一个基于Go语言的后端API示例,适用于合成生物学场景,展示了如何构建一个处理基因序列数据的RESTful端点。该示例使用标准库和Gin框架(类似Ember的轻量级选择),包含基本的CRUD操作、数据验证和结构化响应。

package main

import (
	"encoding/json"
	"net/http"
	"strings"

	"github.com/gin-gonic/gin"
)

// GeneSequence 表示一个基因序列结构
type GeneSequence struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Sequence    string   `json:"sequence"` // DNA序列,例如 "ATCG"
	Description string   `json:"description"`
	Tags        []string `json:"tags"`
}

// 内存存储用于示例(生产环境应使用数据库)
var sequences = []GeneSequence{
	{
		ID:          "seq_1",
		Name:        "CRISPR_Cas9",
		Sequence:    "GATCGATCGATC",
		Description: "基因编辑蛋白序列",
		Tags:        []string{"editing", "therapy"},
	},
}

func main() {
	router := gin.Default()

	// 获取所有基因序列
	router.GET("/sequences", getSequences)
	// 根据ID获取特定序列
	router.GET("/sequences/:id", getSequenceByID)
	// 创建新序列
	router.POST("/sequences", createSequence)
	// 更新序列
	router.PUT("/sequences/:id", updateSequence)
	// 删除序列
	router.DELETE("/sequences/:id", deleteSequence)

	router.Run(":8080")
}

// getSequences 返回所有基因序列
func getSequences(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"data": sequences,
	})
}

// getSequenceByID 根据ID查找序列
func getSequenceByID(c *gin.Context) {
	id := c.Param("id")
	for _, seq := range sequences {
		if seq.ID == id {
			c.JSON(http.StatusOK, gin.H{
				"data": seq,
			})
			return
		}
	}
	c.JSON(http.StatusNotFound, gin.H{
		"error": "序列未找到",
	})
}

// createSequence 创建新基因序列
func createSequence(c *gin.Context) {
	var newSeq GeneSequence
	if err := c.BindJSON(&newSeq); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"error": "无效输入: " + err.Error(),
		})
		return
	}

	// 简单验证序列字段(仅允许ATCG字符)
	if !isValidDNASequence(newSeq.Sequence) {
		c.JSON(http.StatusBadRequest, gin.H{
			"error": "序列必须仅包含A、T、C、G字符",
		})
		return
	}

	sequences = append(sequences, newSeq)
	c.JSON(http.StatusCreated, gin.H{
		"data":    newSeq,
		"message": "序列创建成功",
	})
}

// updateSequence 更新现有序列
func updateSequence(c *gin.Context) {
	id := c.Param("id")
	for i, seq := range sequences {
		if seq.ID == id {
			var updatedSeq GeneSequence
			if err := c.BindJSON(&updatedSeq); err != nil {
				c.JSON(http.StatusBadRequest, gin.H{
					"error": "无效输入: " + err.Error(),
				})
				return
			}
			if !isValidDNASequence(updatedSeq.Sequence) {
				c.JSON(http.StatusBadRequest, gin.H{
					"error": "序列必须仅包含A、T、C、G字符",
				})
				return
			}
			sequences[i] = updatedSeq
			c.JSON(http.StatusOK, gin.H{
				"data":    updatedSeq,
				"message": "序列更新成功",
			})
			return
		}
	}
	c.JSON(http.StatusNotFound, gin.H{
		"error": "序列未找到",
	})
}

// deleteSequence 删除序列
func deleteSequence(c *gin.Context) {
	id := c.Param("id")
	for i, seq := range sequences {
		if seq.ID == id {
			sequences = append(sequences[:i], sequences[i+1:]...)
			c.JSON(http.StatusOK, gin.H{
				"message": "序列删除成功",
			})
			return
		}
	}
	c.JSON(http.StatusNotFound, gin.H{
		"error": "序列未找到",
	})
}

// isValidDNASequence 验证DNA序列字符串
func isValidDNASequence(seq string) bool {
	validChars := "ATCG"
	for _, char := range strings.ToUpper(seq) {
		if !strings.ContainsRune(validChars, char) {
			return false
		}
	}
	return len(seq) > 0
}

运行说明:

  1. 使用 go mod init bio-api 初始化项目。
  2. 安装Gin框架:go get -u github.com/gin-gonic/gin
  3. 运行代码:go run main.go
  4. 通过工具如curl或Postman测试端点:
    • GET http://localhost:8080/sequences 获取所有序列。
    • POST http://localhost:8080/sequences 创建序列(JSON体示例:{"id":"seq_2","name":"Insulin","sequence":"ATCGTA","description":"激素蛋白","tags":["hormone"]})。

此示例展示了Go在构建高性能API方面的优势,包括类型安全、并发处理和简洁的语法。在合成生物学应用中,可扩展此结构以集成生物算法(如约束求解或机器学习模型),处理大规模基因数据。

回到顶部