"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GO에서 데이터베이스 롤백을 연기하는 이유는 무엇입니까?

GO에서 데이터베이스 롤백을 연기하는 이유는 무엇입니까?

2025-02-06에 게시되었습니다
검색:418

Why Defer Database Rollback in Go? 
tx, err : = db.begin ()을 고려하십시오. err! = nil {인 경우 log.fatal (err) } TX.rollback () // 왜 연기 하는가?

이 예제는 트랜잭션 롤백이 이동하는 방법을 보여줍니다. 롤백을 연기하면 다음 작업이 수동 롤백 전에 오류가 발생하거나 코드가 갑자기 반환 되더라도 항상 호출되도록합니다.

tx, err := db.Begin()
if err != nil {
    log.Fatal(err)
}
defer tx.Rollback()  // Why defer?
오류에 수동으로 롤백을 수동으로 커밋하지 않겠습니까?

오류가 발생하면 트랜잭션을 먼저 커밋하고 수동으로 롤백하지 않는 이유가 궁금 할 수도 있습니다. 이 접근법은 데이터베이스에서 고아 기록 또는 불일치로 이어질 수 있으므로 비효율적입니다.

롤백을 연기하고 워크 플로우를 연기하고

코드를 연기합니다. 다음 작업이 실패하면 롤백이 발생하도록합니다. 워크 플로가 전개되는 방법은 다음과 같습니다.
  • 다음 작업 (예 : stmt.exec ())가 성공하면 tx.commit () 호출이 성공하고 거래가 커밋됩니다. &&] 후속 작업 중 하나가 오류가 발생하면 지연된 TX.Rollback ()가 부분적으로 변경되도록 실행됩니다. ]
  • Simplicity :
롤백 연기 연기 오류 처리를 단순화하고 일관성을 보장합니다.

신뢰성 :

  • 효율성 : 오류의 경우 고아 레코드 또는 데이터베이스 불일치 생성을 피하십시오. 커밋 된 트랜잭션에서 tx.rollback ()에게 전화하면 커밋 된 트랜잭션이 롤백 될 수 없으므로 효과적인 영향을 미치지 않습니다. ] 롤백 연기는 파일 핸들 잠금 또는 네트워크 연결과 같은 다른 유형의 리소스에 사용될 수 있습니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3