# ScriptTool.go

```go
package saseul

import (
	"staff"
)

// ScriptTool 인터페이스는 재시작 기능을 정의합니다.
type ScriptTool interface {
	Restart(func())
}

// scriptTool 구조체는 ScriptTool 인터페이스를 구현합니다.
type scriptTool struct{}

// NewScriptTool 함수는 ScriptTool 인터페이스의 새 인스턴스를 생성합니다.
func NewScriptTool() ScriptTool {
	return &scriptTool{}
}

// Restart 메서드는 주어진 함수를 호출하여 서버나 프로세스를 재시작합니다.
func (st *scriptTool) Restart(f func()) {
	isRunning := staff.ProcessManager.IsRunning(staff.Master)

	if isRunning {
		stop := &staff.Stop{}
		stop.Main()
	}

	f()

	if isRunning {
		start := &staff.Start{}
		start.Main()
	}
}
```

#### 주석 설명

* **Go 언어 코드 설명**:
  * `ScriptTool` 인터페이스: `Restart` 메서드를 정의하여 재시작 기능을 제공합니다.
  * `scriptTool` 구조체: `ScriptTool` 인터페이스를 구현합니다.
  * `NewScriptTool` 함수: `ScriptTool` 인터페이스의 새 인스턴스를 생성합니다.
  * `Restart` 메서드: 주어진 함수를 호출하여 서버나 프로세스를 재시작합니다. Go 언어에서는 콜백 함수를 직접 사용하여 재시작 함수를 전달하는 방식으로 구현되었습니다.
  * `staff` 패키지: PHP에서의 `Saseul\Staff` 네임스페이스가 `staff` 패키지로 변환되었습니다. `staff.ProcessManager.IsRunning` 및 `staff.Start`와 `staff.Stop` 클래스는 해당 패키지 내의 구현체를 사용합니다.
