Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Go server SDK untuk GameLift Server Amazon -- Tindakan
Gunakan referensi server SDK 5.x untuk mengintegrasikan game multipemain Anda untuk hosting denganAmazon GameLift Servers. Untuk panduan tentang proses integrasi, lihatTambahkan GameLift Server Amazon ke server game Anda dengan SDK server.
GameLiftServerAPI.gomendefinisikan tindakan SDK server Go.
Go server SDK untuk Amazon GameLift Servers - Jenis data
Tindakan
GetSdkVersion()
Mengembalikan nomor versi SDK saat ini yang dibangun ke dalam proses server.
Sintaks
func GetSdkVersion() (string, error)
Nilai yang ditampilkan
Jika berhasil, mengembalikan versi SDK saat ini sebagai string. String yang dikembalikan menyertakan nomor versi (contoh5.0.0). Jika tidak berhasil, mengembalikan pesan kesalahan seperticommon.SdkVersionDetectionFailed.
Contoh
version, err := server.GetSdkVersion()
InitMetrics()
Menginisialisasi pengumpulan metrik untuk SDK. Amazon GameLift Servers Metode ini mengatur pelaporan metrik untuk membantu memantau kinerja dan kesehatan server. Sebut metode ini setelah InitSDK() tetapi sebelumProcessReady().
Sintaks
func InitMetrics() error func InitMetrics(metricsParameters MetricsParameters) error
Parameter
- MetricsParameters (opsional)
-
Ob
MetricsParametersjek yang mengonfigurasi koleksi metrik. Jika tidak disediakan, konfigurasi metrik default digunakan. MetricsParametersStruktur berisi bidang-bidang berikut:-
StatsdHost- Nama host atau alamat IP dari server StatSD. -
StatsdPort- Nomor port untuk server StatsD. -
CrashReporterHost- Nama host atau alamat IP dari layanan reporter kerusakan. -
CrashReporterPort- Nomor port untuk layanan reporter kecelakaan. -
FlushIntervalMs- Interval dalam milidetik untuk pembilasan data metrik. -
MaxPacketSize- Ukuran maksimum paket metrik dalam byte.
Untuk informasi selengkapnya tentang MetricsParameters struktur, lihat Server SDK 5.x untuk tipe data C#.
-
Nilai yang dikembalikan
Jika berhasil, mengembalikan nil kesalahan untuk menunjukkan bahwa pengumpulan metrik telah berhasil diinisialisasi.
Contoh
Inisialisasi metrik dengan konfigurasi default:
err := server.InitMetrics()
Inisialisasi metrik dengan konfigurasi khusus:
metricsParams := MetricsParameters{ StatsdHost: "localhost", StatsdPort:8125, CrashReporterHost: "localhost", CrashReporterPort:9125, FlushIntervalMs:5000, MaxPacketSize:1024, } err := server.InitMetrics(metricsParams)
InitMetricsFromEnvironment()
Menginisialisasi pengumpulan metrik untuk Amazon GameLift Servers SDK menggunakan konfigurasi dari variabel lingkungan. Metode ini mengatur pelaporan metrik menggunakan pengaturan default yang berasal dari lingkungan runtime.
Sebut metode ini setelah InitSDK() tetapi sebelumProcessReady().
Sintaks
func InitMetricsFromEnvironment() error
Nilai yang ditampilkan
Jika berhasil, mengembalikan nil kesalahan untuk menunjukkan bahwa pengumpulan metrik telah berhasil diinisialisasi menggunakan konfigurasi lingkungan.
Contoh
err := server.InitMetricsFromEnvironment()
InitSDK()
Menginisialisasi SDK. Amazon GameLift Servers Panggil metode ini saat peluncuran sebelum inisialisasi lain yang terkait Amazon GameLift Servers terjadi. Metode ini mengatur komunikasi antara server dan Amazon GameLift Servers layanan.
Sintaks
func InitSDK(params ServerParameters) error
Parameter
- ServerParameters
-
Untuk menginisialisasi server game pada armada Any Amazon GameLift Servers where, buat
ServerParametersobjek dengan informasi berikut:-
URL yang WebSocket digunakan untuk terhubung ke server game Anda.
-
ID proses yang digunakan untuk meng-host server game Anda.
-
ID komputasi yang menghosting proses server game Anda.
-
ID Amazon GameLift Servers armada yang berisi komputasi Any Amazon GameLift Servers where Anda.
-
Token otorisasi yang dihasilkan oleh Amazon GameLift Servers operasi.
Untuk menginisialisasi server game pada arm Amazon GameLift Servers ada EC2 terkelola, buat
ServerParametersobjek tanpa parameter. Dengan panggilan ini, Amazon GameLift Servers agen mengatur lingkungan komputasi dan secara otomatis terhubung ke Amazon GameLift Servers layanan untuk Anda. -
Nilai yang dikembalikan
Jika berhasil, mengembalikan nil kesalahan untuk menunjukkan bahwa proses server siap dipanggilProcessReady().
catatan
Jika panggilan ke InitSDK() gagal untuk build game yang diterapkan ke armada Anywhere, periksa ServerSdkVersion parameter yang digunakan saat membuat sumber daya build. Anda harus secara eksplisit menetapkan nilai ini ke versi SDK server yang digunakan. Nilai default untuk parameter ini adalah 4.x, yang tidak kompatibel. Untuk mengatasi masalah ini, buat build baru dan terapkan ke armada baru.
Contoh
Amazon GameLift ServersContoh di mana saja
//Define the server parameters serverParameters := ServerParameters { WebSocketURL: "wss://us-west-1.api.amazongamelift.com", ProcessID: "PID1234", HostID: "HardwareAnywhere", FleetID: "aarn:aws:gamelift:us-west-1:111122223333:fleet/fleet-9999ffff-88ee-77dd-66cc-5555bbbb44aa", AuthToken: "1111aaaa-22bb-33cc-44dd-5555eeee66ff" } //Call InitSDK to establish a local connection with the Amazon GameLift Servers Agent to enable further communication. err := server.InitSDK(serverParameters)
Amazon GameLift Serverscontoh EC2 yang dikelola
//Define the server parameters serverParameters := ServerParameters {} //Call InitSDK to establish a local connection with the Amazon GameLift Servers Agent to enable further communication. err := server.InitSDK(serverParameters)
ProcessReady()
Memberi tahu Amazon GameLift Servers bahwa proses server siap untuk menyelenggarakan sesi game. Panggil metode ini setelah memanggil. InitSDK() Metode ini harus dipanggil hanya satu kali per proses.
Sintaks
func ProcessReady(param ProcessParameters) error
Parameter
- ProcessParameters
-
Sebuah ProcessParameters objek mengkomunikasikan informasi berikut tentang proses server:
-
Nama-nama metode callback yang diimplementasikan dalam kode server game yang dipanggil Amazon GameLift Servers layanan untuk berkomunikasi dengan proses server.
-
Nomor port yang didengarkan oleh proses server.
-
Jenis LogParameters data yang berisi jalur ke file khusus sesi game apa pun yang Amazon GameLift Servers ingin Anda tangkap dan simpan.
-
Nilai yang dikembalikan
Mengembalikan kesalahan dengan pesan kesalahan jika metode gagal. Meng nil embalikan jika metode berhasil.
Contoh
Contoh ini menggambarkan panggilan ProcessReady() dan mendelegasi implementasi fungsi.
// Define the process parameters processParams := ProcessParameters { OnStartGameSession: gameProcess.OnStartGameSession, OnUpdateGameSession: gameProcess.OnGameSessionUpdate, OnProcessTerminate: gameProcess.OnProcessTerminate, OnHealthCheck: gameProcess.OnHealthCheck, Port:port, LogParameters: LogParameters { // logging and error example []string {"C:\\game\\logs", "C:\\game\\error"} } } err := server.ProcessReady(processParams)
ProcessEnding()
Member Amazon GameLift Servers itahu bahwa proses server dihentikan. Panggil metode ini setelah semua tugas pembersihan lainnya (termasuk mematikan sesi permainan aktif) dan sebelum menghentikan proses. Bergantung pada hasilProcessEnding(), proses keluar dengan sukses (0) atau kesalahan (-1) dan menghasilkan peristiwa armada. Jika proses berakhir dengan kesalahan, peristiwa armada yang dihasilkan adalahSERVER_PROCESS_TERMINATED_UNHEALTHY.
Sintaks
func ProcessEnding() error
Nilai yang ditampilkan
Mengembalikan kode kesalahan 0 atau kode kesalahan yang ditentukan.
Contoh
// operations to end game sessions and the server process defer func() { err := server.ProcessEnding() server.Destroy() if err != nil { fmt.Println("ProcessEnding() failed. Error: ", err) os.Exit(-1) } else { os.Exit(0) } }
ActivateGameSession()
Memberi tahu Amazon GameLift Servers bahwa proses server telah mengaktifkan sesi permainan dan sekarang siap untuk menerima koneksi pemain. Tindakan ini disebut sebagai bagian dari fungsi onStartGameSession() callback, setelah semua inisialisasi sesi game.
Sintaks
func ActivateGameSession() error
Nilai yang ditampilkan
Mengembalikan kesalahan dengan pesan kesalahan jika metode gagal.
Contoh
Contoh ini menunjukkan di ActivateGameSession() panggil sebagai bagian dari fungsi onStartGameSession() delegasi.
func OnStartGameSession(GameSession gameSession) { // game-specific tasks when starting a new game session, such as loading map // Activate when ready to receive players err := server.ActivateGameSession(); }
UpdatePlayerSessionCreationPolicy()
Memperbarui kemampuan sesi game saat ini untuk menerima sesi pemain baru. Sesi game dapat diatur untuk menerima atau menolak semua sesi pemain baru.
Sintaks
func UpdatePlayerSessionCreationPolicy(policy model.PlayerSessionCreationPolicy) error
Parameter
- pemain SessionCreationPolicy
-
Nilai string yang menunjukkan apakah sesi permainan menerima pemain baru.
Nilai yang valid meliputi:
-
model.AcceptAll— Terima semua sesi pemain baru. -
model.DenyAll— Tolak semua sesi pemain baru.
-
Nilai yang dikembalikan
Mengembalikan kesalahan dengan pesan kesalahan jika terjadi kegagalan.
Contoh
Contoh ini menetapkan kebijakan bergabung sesi game saat ini untuk menerima semua pemain.
err := server.UpdatePlayerSessionCreationPolicy(model.AcceptAll)
GetGameSessionId()
Mengambil ID sesi game yang dihosting oleh proses server aktif.
Sintaks
func GetGameSessionID() (string, error)
Parameter
Tindakan ini tidak memiliki parameter.
Nilai yang dikembalikan
Jika berhasil, mengembalikan ID sesi permainan dan kesalahan nil. Untuk proses idle yang belum diaktifkan dengan sesi game, panggilan mengembalikan string kosong dan nil kesalahan.
Contoh
gameSessionID, err := server.GetGameSessionID()
GetTerminationTime()
Mengembalikan waktu proses server dijadwalkan untuk dimatikan jika waktu penghentian tersedia. Proses server mengambil tindakan ini setelah menerima onProcessTerminate() panggilan balik dariAmazon GameLift Servers. Amazon GameLift Serversmemang onProcessTerminate() gil karena alasan berikut:
-
Ketika proses server telah melaporkan kesehatan yang buruk atau belum meresponsAmazon GameLift Servers.
-
Saat mengakhiri instance selama peristiwa penurunan skala.
-
Ketika sebuah instance dihentikan karena gangguan instans spot.
Sintaks
func GetTerminationTime() (int64, error)
Nilai yang ditampilkan
Jika berhasil, mengembalikan stempel waktu dalam detik zaman yang dijadwalkan proses server untuk dimatikan dan penghentian nil kesalahan. Nilainya adalah waktu penghentian, dinyatakan dalam tanda centang yang telah berlalu dari0001 00:00:00. Misalnya, nilai 2020-09-13 12:26:40 -000Z waktu tanggal sama dengan tanda cent 637355968000000000 ang. Jika tidak ada waktu penghentian tersedia, pesan kesalahan ditampilkan.
Contoh
terminationTime, err := server.GetTerminationTime()
AcceptPlayerSession()
Memberi tahu Amazon GameLift Servers bahwa pemain dengan ID sesi pemain yang ditentukan telah terhubung ke proses server dan perlu validasi. Amazon GameLift Serversmemverifikasi bahwa ID sesi pemain valid. Setelah sesi pemain divalidasi, Amazon GameLift Servers ubah status slot pemain dari RESERVED keACTIVE.
Sintaks
func AcceptPlayerSession(playerSessionID string) error
Parameter
playerSessionId-
ID unik yang dikeluarkan Amazon GameLift Servers saat sesi pemain baru dibuat.
Nilai yang dikembalikan
Mengembalikan hasil generik yang terdiri dari keberhasilan atau kegagalan dalam sebuah pesan kesalahan.
Contoh
Contoh ini menangani permintaan koneksi yang mencakup memvalidasi dan menolak ID sesi pemain yang tidak valid.
func ReceiveConnectingPlayerSessionID(conn Connection, playerSessionID string) { err := server.AcceptPlayerSession(playerSessionID) if err != nil { connection.Accept() } else { connection.Reject(err.Error()) } }
RemovePlayerSession()
Member Amazon GameLift Servers itahu bahwa pemain telah terputus dari proses server. Sebagai tanggapan, Amazon GameLift Servers ubah slot pemain menjadi tersedia.
Sintaks
func RemovePlayerSession(playerSessionID string) error
Parameter
playerSessionId-
ID unik yang dikeluarkan Amazon GameLift Servers saat sesi pemain baru dibuat.
Nilai yang dikembalikan
Mengembalikan hasil generik yang terdiri dari keberhasilan atau kegagalan dalam sebuah pesan kesalahan.
Contoh
err := server.RemovePlayerSession(playerSessionID)
DescribePlayerSessions()
Mengambil data sesi pemain yang mencakup pengaturan, metadata sesi, dan data pemain. Gunakan metode ini untuk mendapatkan informasi tentang hal berikut:
-
Sesi pemain tunggal
-
Semua sesi pemain dalam sesi permainan
-
Semua sesi pemain yang terkait dengan ID pemain tunggal
Sintaks
func DescribePlayerSessions(req request.DescribePlayerSessionsRequest) (result.DescribePlayerSessionsResult, error) { return srv.describePlayerSessions(&req) }
Parameter
- DescribePlayerSessionsRequest
-
Ob
DescribePlayerSessionsRequestjek menjelaskan sesi pemain mana yang akan diambil.
Nilai yang dikembalikan
Jika berhasil, mengembalikan DescribePlayerSessionsResult objek yang berisi sekumpulan objek sesi pemain yang sesuai dengan parameter permintaan.
Contoh
Contoh ini meminta semua sesi pemain yang terhubung secara aktif ke sesi permainan tertentu. Dengan menghilangkan NextToken dan mengatur nilai Limit menjadi 10, Amazon GameLift Servers mengembalikan 10 catatan sesi pemain pertama yang cocok dengan permintaan.
// create request describePlayerSessionsRequest := request.NewDescribePlayerSessions() describePlayerSessionsRequest.GameSessionID, _ = server.GetGameSessionID() // get ID for the current game session describePlayerSessionsRequest.Limit =10// return the first 10 player sessions describePlayerSessionsRequest.PlayerSessionStatusFilter = "ACTIVE" // Get all player sessions actively connected to the game session describePlayerSessionsResult, err := server.DescribePlayerSessions(describePlayerSessionsRequest)
StartMatchBackfill()
Mengirim permintaan untuk menemukan pemain baru untuk slot terbuka dalam sesi permainan yang dibuat denganFlexMatch. Untuk informasi selengkapnya, lihat FlexMatch fitur isi ulang.
Tindakan ini asinkron. Jika pemain baru dicocokkan, Amazon GameLift Servers memberikan data matchmaker yang diperbarui menggunakan fungsi callback. OnUpdateGameSession()
Proses server hanya dapat melakukan satu permintaan backfill match yang aktif dalam satu waktu. Untuk mengirim permintaan baru, panggil StopMatchBackfill() terlebih dahulu untuk membatalkan permintaan asli.
Sintaks
func StartMatchBackfill(req request.StartMatchBackfillRequest) (result.StartMatchBackfillResult, error)
Parameter
- StartMatchBackfillRequest
-
Sebuah StartMatchBackfillRequest objek mengkomunikasikan informasi berikut:
-
ID tiket untuk ditetapkan ke permintaan backfill. Informasi ini opsional; jika tidak ada ID yang diberikan, Amazon GameLift Servers buat satu.
-
Matchmaker untuk dikirimi permintaan. ARN konfigurasi penuh diperlukan. Nilai ini ada dalam data matchmaker sesi game.
-
ID sesi permainan untuk diisi ulang.
-
Data perjodohan yang tersedia untuk pemain sesi game saat ini.
-
Nilai yang dikembalikan
Mengembalikan StartMatchBackfillResult objek dengan ID tiket isi ulang yang cocok, atau kegagalan dengan pesan kesalahan.
Contoh
// form the request startBackfillRequest := request.NewStartMatchBackfill() startBackfillRequest.RequestID = "1111aaaa-22bb-33cc-44dd-5555eeee66ff" // optional startBackfillRequest.MatchmakingConfigurationArn = "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig" var matchMaker model.MatchmakerData if err := matchMaker.UnmarshalJSON([]byte(gameSession.MatchmakerData)); err != nil { return } startBackfillRequest.Players = matchMaker.Players res, err := server.StartMatchBackfill(startBackfillRequest) // Implement callback function for backfill func OnUpdateGameSession(myGameSession model.GameSession) { // game-specific tasks to prepare for the newly matched players and update matchmaker data as needed }
StopMatchBackfill()
Membatalkan permintaan isi ulang kecocokan yang aktif. Untuk informasi selengkapnya, lihat FlexMatch fitur isi ulang.
Sintaks
func StopMatchBackfill(req request.StopMatchBackfillRequest) error
Parameter
- StopMatchBackfillRequest
-
Ob StopMatchBackfillRequest jek yang mengidentifikasi tiket perjodohan untuk dibatalkan:
-
ID tiket yang ditetapkan untuk permintaan isi ulang.
-
Matchmaker tempat permintaan isi ulang dikirim.
-
Sesi permainan yang terkait dengan permintaan isi ulang.
-
Nilai yang dikembalikan
Mengembalikan hasil generik yang terdiri dari keberhasilan atau kegagalan dalam sebuah pesan kesalahan.
Contoh
stopBackfillRequest := request.NewStopMatchBackfill() // Use this function to create request stopBackfillRequest.TicketID = "1111aaaa-22bb-33cc-44dd-5555eeee66ff" stopBackfillRequest.MatchmakingConfigurationArn = "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig" //error err := server.StopMatchBackfill(stopBackfillRequest)
GetComputeCertificate()
Mengambil jalur ke sertifikat TLS yang digunakan untuk mengenkripsi koneksi jaringan antara server game dan klien game Anda. Anda dapat menggunakan jalur sertifikat saat mendaftarkan perangkat komputasi ke armada Any Amazon GameLift Servers where. Untuk informasi selengkapnya, lihat RegisterCompute.
Sintaks
func GetComputeCertificate() (result.GetComputeCertificateResult, error)
Nilai yang ditampilkan
Mengembalikan GetComputeCertificateResult objek yang berisi berikut ini:
-
CertificatePath: Jalur ke sertifikat TLS pada sumber daya komputasi Anda. Saat menggunakan armada yang Amazon GameLift Servers dikelola, jalur ini berisi:
-
certificate.pem: Sertifikat pengguna akhir. RanTAI sertifikat lengkap adalah kombinasi yangcertificateChain.pemditambahkan ke sertifikat ini. -
certificateChain.pem: RanTAI sertifikat yang berisi sertifikat root dan sertifikat perantara. -
rootCertificate.pem: Sertifikat root. -
privateKey.pem: Kunci pribadi untuk sertifikat pengguna akhir.
-
-
ComputeName: Nama sumber daya komputasi Anda.
Contoh
tlsCertificate, err := server.GetFleetRoleCredentials(getFleetRoleCredentialsRequest)
GetFleetRoleCredentials()
Mengambil kredentif peran layanan yang Anda buat untuk memperluas izin ke yang lain Layanan AWS . Amazon GameLift Servers KredenSIAL ini memungkinkan server game Anda untuk menggunakan AWS sumber daya Anda. Untuk informasi selengkapnya, lihat Menyiapkan peran layanan IAM untuk Amazon GameLift Servers.
Sintaks
func GetFleetRoleCredentials( req request.GetFleetRoleCredentialsRequest, ) (result.GetFleetRoleCredentialsResult, error) { return srv.getFleetRoleCredentials(&req) }
Parameter
- GetFleetRoleCredentialsRequest
-
Kredentif peran yang memperluas akses terbatas ke AWS sumber daya Anda ke server game.
Nilai yang dikembalikan
Mengembalikan GetFleetRoleCredentialsResult objek yang berisi berikut ini:
-
AssumedRoleUserArn - Nama Sumber Daya Amazon (ARN) dari pengguna yang menjadi milik peran layanan.
-
AssumedRoleId - ID pengguna yang menjadi milik peran layanan.
-
AccessKeyId - ID kunci akses untuk mengotentikasi dan memberikan akses ke AWS sumber daya Anda.
-
SecretAccessKey - ID kunci akses rahasia untuk otentikasi.
-
SessionToken - Token untuk mengidentifikasi sesi aktif saat ini yang berinteraksi dengan AWS sumber daya Anda.
-
Kedaluwarsa - Jumlah waktu hingga kredentif sesi Anda kedaluwarsa.
Contoh
// form the customer credentials request getFleetRoleCredentialsRequest := request.NewGetFleetRoleCredentials() getFleetRoleCredentialsRequest.RoleArn = "arn:aws:iam::123456789012:role/service-role/exampleGameLiftAction" credentials, err := server.GetFleetRoleCredentials(getFleetRoleCredentialsRequest)
ListContainersNetworkInfo()
Mengambil informasi jaringan untuk semua kontainer yang berjalan pada instans yang sama, termasuk nama, ID, alamat IP lokal, dan jenis grup kontainer masing-masing. Gunakan informasi ini untuk mengaktifkan proses server game untuk menemukan dan berkomunikasi dengan wadah lain yang berjalan pada instans yang sama.
Tindakan ini hanya didukung pada armada kontainer. Ketika dipanggil dari jenis komputasi lainnya, ia mengembalikan UnsupportedComputeTypeException kesalahan. Amazon GameLift Serversmemperoleh informasi jaringan dari server penemuan yang berjalan secara lokal pada instance.
Sintaks
func ListContainersNetworkInfo() (result.ListContainersNetworkInfoResult, error)
Nilai yang ditampilkan
Jika berhasil, mengembalikan ListContainersNetworkInfoResult objek yang berisi berikut ini:
-
ContainersNetworkInfo- DaftarContainerNetworkInfoentri, dengan satu entri untuk setiap wadah yang berjalan pada instance. Setiap entri berisi yang berikut:-
ContainerName- Nama wadah. -
ContainerID- Pengidentifikasi unik wadah. -
IPAddress- Alamat IP lokal dari wadah pada instance. -
ContainerGroupType- Jenis kelompok kontainer yang dimiliki wadah tersebut. Nilai yang valid adalahGAME_SERVERdanPER_INSTANCE.
-
Contoh
networkInfo, err := server.ListContainersNetworkInfo() if err != nil { fmt.Println("ListContainersNetworkInfo() failed. Error: ", err) return } for _, container := range networkInfo.ContainersNetworkInfo { fmt.Printf("Container %s (%s) at %s, group type %s\n", container.ContainerName, container.ContainerID, container.IPAddress, container.ContainerGroupType) }
Hancurkan ()
Membebaskan SDK server Amazon GameLift Servers game dari memori. Sebagai praktik terbaik, panggil metode ini setelah ProcessEnding() dan sebelum mengakhiri proses. Jika Anda menggunakan armada Anywhere dan Anda tidak menghentikan proses server setelah setiap sesi permainan, hubungi Destroy() dan kemudian InitSDK() inisialisasi ulang sebelum memberi tahu Amazon GameLift Servers bahwa proses siap untuk menyelenggarakan sesi permainan. ProcessReady()
Sintaks
func Destroy() error { return srv.destroy() }
Nilai yang ditampilkan
Mengembalikan kesalahan dengan pesan kesalahan jika metode gagal.
Contoh
// operations to end game sessions and the server process defer func() { err := server.ProcessEnding() server.Destroy() if err != nil { fmt.Println("ProcessEnding() failed. Error: ", err) os.Exit(-1) } else { os.Exit(0) } }