AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
[TOC] ## 示例 ### 披萨订购 <details> <summary>main.go</summary> ``` package main import ( "fmt" "log" ) type account struct { name string } func newAccount(accountName string) *account { return &account{ name: accountName, } } func (a *account) checkAccount(accountName string) error { if a.name != accountName { return fmt.Errorf("Account Name is incorrect") } fmt.Println("Account Verified") return nil } type securityCode struct { code int } func newSecurityCode(code int) *securityCode { return &securityCode{ code: code, } } func (s *securityCode) checkCode(incomingCode int) error { if s.code != incomingCode { return fmt.Errorf("Security Code is incorrect") } fmt.Println("SecurityCode Verified") return nil } type wallet struct { balance int } func newWallet() *wallet { return &wallet{ balance: 0, } } func (w *wallet) creditBalance(amount int) { w.balance += amount fmt.Println("Wallet balance added successfully") return } func (w *wallet) debitBalance(amount int) error { if w.balance < amount { return fmt.Errorf("Balance is not sufficient") } fmt.Println("Wallet balance is Sufficient") w.balance = w.balance - amount return nil } type ledger struct { } func (s *ledger) makeEntry(accountID, txnType string, amount int) { fmt.Printf("Make ledger entry for accountId %s with txnType %s for amount %d\n", accountID, txnType, amount) return } type notification struct { } func (n *notification) sendWalletCreditNotification() { fmt.Println("Sending wallet credit notification") } func (n *notification) sendWalletDebitNotification() { fmt.Println("Sending wallet debit notification") } type walletFacade struct { account *account wallet *wallet securityCode *securityCode notification *notification ledger *ledger } func newWalletFacade(accountID string, code int) *walletFacade { fmt.Println("Starting create account") walletFacacde := &walletFacade{ account: newAccount(accountID), securityCode: newSecurityCode(code), wallet: newWallet(), notification: &notification{}, ledger: &ledger{}, } fmt.Println("Account created") return walletFacacde } func (w *walletFacade) addMoneyToWallet(accountID string, securityCode int, amount int) error { fmt.Println("Starting add money to wallet") err := w.account.checkAccount(accountID) if err != nil { return err } err = w.securityCode.checkCode(securityCode) if err != nil { return err } w.wallet.creditBalance(amount) w.notification.sendWalletCreditNotification() w.ledger.makeEntry(accountID, "credit", amount) return nil } func (w *walletFacade) deductMoneyFromWallet(accountID string, securityCode int, amount int) error { fmt.Println("Starting debit money from wallet") err := w.account.checkAccount(accountID) if err != nil { return err } err = w.securityCode.checkCode(securityCode) if err != nil { return err } err = w.wallet.debitBalance(amount) if err != nil { return err } w.notification.sendWalletDebitNotification() w.ledger.makeEntry(accountID, "credit", amount) return nil } func main() { fmt.Println() walletFacade := newWalletFacade("abc", 1234) fmt.Println() err := walletFacade.addMoneyToWallet("abc", 1234, 10) if err != nil { log.Fatalf("Error: %s\n", err.Error()) } fmt.Println() err = walletFacade.deductMoneyFromWallet("abc", 1234, 5) if err != nil { log.Fatalf("Error: %s\n", err.Error()) } } ``` </details> <br /> 输出 ``` Starting create account Account created Starting add money to wallet Account Verified SecurityCode Verified Wallet balance added successfully Sending wallet credit notification Make ledger entry for accountId abc with txnType credit for amount 10 Starting debit money from wallet Account Verified SecurityCode Verified Wallet balance is Sufficient Sending wallet debit notification Make ledger entry for accountId abc with txnType credit for amount 5 ```