函数 TestTransferTx(ttesting.T) { store := NewStore(testDB) account1 := createRandomAccount(t) account2 := createRandomAccount(t) fmt.Println(">> before:", account1.Balance, account2.Balance) // run n concurrent transfer transactions // 运输n个并发传输事务 n := 5 amount := int64(10) errs := make(chan error) results := make(chan TransferTxResult) for i := 0; 我 < n; i++ { go func() { ctx := context.Background() 结果,err := store.TransferTx(ctx, TransferTxParams{ FromAccountID: account1.ID, ToAccountID: account2.ID, Amount: amount, }) errs <- err results <- result }() } //检查结果 existed := make(map[int]bool) for i := 0; 我 < n; i++ { err := <-errs require.NoError(t, err) result := <-results require.NotEmpty(t, result) //检查传输检查传输 transfer := result.金额,2金额,3金额,......n*金额 k := int(diff1 / amount) require.True(t, k >= 1 && k <= n) require.NotContains(t, existed, k) existed[k] = true } //检查最终更新的余额 updatedAccount1, err := testQueries.GetAccount(context.Background(), account1.ID) require.NoError(t, err) updatedAccount2, err := testQueries. GetAccount(context.Background(), account2.ID) require.NoError(t, err) fmt.Println(">> 之后:", updatedAccount1.Balance, updatedAccount2.Balance) require.Equal(t, account1.Balance-int64 (n)*金额,updatedAccount1.Balance) require.Equal(t, account2.Balance+int64(n)*amount, updatedAccount2.Balance) }
时间: 2024-04-03 08:37:05 浏览: 65
这段代码是一个 Go 语言函数,用于测试一个行账户转账的并发事务处理。函数中创建了两个随机账户,并在并发的情况下进行 n 次金额为 amount 的转账操作。中使用了 Go 语言的并发编程机制,通过 goroutine 来并发执行转账事务,并将执行结果和错误分别通过结果通道和错误通道返回。在所有并发操作执行完毕后,函数会检查每次转账的结果,检查每次转账是否成功,并检查最终更新的账户余额是否正确。
相关问题
Error 'Can't drop database 'testdb'; database doesn't exist' on query. Default database: 'testdb'. Query: 'drop database testdb'解决办法
如果你想删除一个名为testdb的数据库,但是该数据库并不存在,你可以尝试执行以下步骤:
1. 确认当前连接的数据库是否为testdb,可以使用以下命令查看当前连接的数据库:
```
SELECT DATABASE();
```
2. 如果当前连接的数据库不是testdb,可以使用以下命令切换到testdb数据库:
```
USE testdb;
```
3. 然后再尝试删除testdb数据库:
```
DROP DATABASE testdb;
```
如果你执行以上步骤仍然无法删除该数据库,可能是因为你没有足够的权限来删除该数据库。在这种情况下,你需要以具有删除数据库权限的用户身份登录到MySQL服务器,并重复以上步骤。
version: '3' services: web: image: php:apache ports: - "80:80" volumes: - ./web:/var/www/html depends_on: - db db: image: mysql environment: MYSQL_DATABASE: testdb MYSQL_USER: root MYSQL_PASSWORD: "2111800Aa2315600@" MYSQL_ROOT_PASSWORD: "2111800Aa2315600@"
你的 `docker-compose.yml` 文件中,`db` 服务需要缩进两个空格,与 `web` 服务并列。同时,你的 `db` 服务也缺少了 `ports` 配置。你需要将 `docker-compose.yml` 文件修改为以下内容:
```
version: '3'
services:
web:
image: php:apache
ports:
- "80:80"
volumes:
- ./web:/var/www/html
depends_on:
- db
db:
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: testdb
MYSQL_USER: root
MYSQL_PASSWORD: "2111800Aa2315600@"
MYSQL_ROOT_PASSWORD: "2111800Aa2315600@"
```
修改完成后,使用 `docker-compose up` 启动服务即可。
阅读全文