# seata-go-samples

## How to run samples

1. Start the seata-server service with the docker file under the /dockercomposer folder

   ```shell
   git clone https://github.com/seata/seata-go-samples.git
   ```

   ```shell
   cd dockercompose
   ```

   ```shell
   docker-compose -f docker-compose.yml up -d seata-server
   ```

2. Start and run a sample, for example let's run a basic distributed transaction sample of AT

   ```shell
   cd at/basic
   ```

   ```shell
   go run .
   ```

### Customize mysql connection configurations

The default mysql connection configuration is suitable with dockercompose/docker-compose.yml.

You can also customize it by system environment.

System Env Supported:

1. MYSQL_HOST
2. MYSQL_PORT
3. MYSQL_USERNAME
4. MYSQL_PASSWORD
5. MYSQL_DB

## How to use go mod replace to test samples for new PR

1. Modify the seata-go dependency version to v0.0.0-incompatible, and remove the version number if it exists in the
   original dependency path.

   ```
   //github.com/seata/seata-go v1.0.3
   github.com/seata/seata-go v0.0.0-incompatibl
   ```

2. Find the absolute or relative path to your local code.

   ```
   /Users/mac/Desktop/GO/seata-go
   ../seata-go
   ```

3. Add the replace module to the go.mod file and change it to the local code path.

   ```
   github.com/seata/seata-go =>  ../seata-go
   ```

4. Synchronization dependencies.

   ```shell
   go mod tidy
   ```

5. Run the sample test code.

## How to use go workspace to test samples for new PR (Recommended)

You can use your local project forked to test new pr that haven't merged into github.com/seata/seata-go.

1. Make sure your go version is 1.18 or later.

2. Fork and download two projects (seata-go and seata-go-samples), and put them into a same local directory.

For examples:

```text
/Users/xxx/code/github.com/yourid/seata-go
/Users/xxx/code/github.com/yourid/seata-go-samples
```

3. Execute go work init command in projects root directory.

```shell
cd /Users/xxx/code/github.com/yourid
```

```shell
go work init
```

You will find a go.work file in /Users/xxx/code/github.com/yourid.

4. Add seata-go and seata-go-samples into the same go workspace.

```shell
go work use ./seata-go
```

```shell
go work use ./seata-go-samples
```

Now, the content of go.work file is as follows.

```text
go 1.19

use (
        ./seata-go
        ./seata-go-samples
)
```

5. Run the sample test code in seata-go-samples.
