Home > Backend Development > Golang > golang start and stop service

golang start and stop service

王林
Release: 2023-05-10 11:37:36
Original
1054 people have browsed it

Golang is one of the most popular programming languages ​​at present and can be used to develop various applications, including server applications. This article will introduce how to use golang to write code to start and stop services.

1. Start the service

  1. Define the service

First, we need to define a service structure. The following is a simple example:

type MyService struct {
    httpServer *http.Server
}

func NewMyService(port string) *MyService {
    return &MyService{
        httpServer: &http.Server{
            Addr: fmt.Sprintf(":%s", port),
        },
    }
}

func (svc *MyService) Run() error {
    return svc.httpServer.ListenAndServe()
}
Copy after login

In this example, we define a structure named MyService, which contains an instance of http.Server. We also define the NewMyService function, which creates an instance of the MyService structure. This function needs to pass a port number and use it to configure the Addr property of http.Server. Finally, we also define a Run method, which starts http.Server and starts listening for incoming requests.

  1. Start the service

To start the service, we only need to use the NewMyService function to create a service instance, and then call the Run method That’s it:

svc := NewMyService("8080")
err := svc.Run()
if err != nil {
    fmt.Printf("Failed to start service: %s", err)
    return
}
Copy after login

This code will create a new service instance named svc and configure it to listen on port 8080. Then, we call the Run method to start the service. If the startup fails, we will print an error message to the console.

2. Stopping the service

Stopping the service is slightly more complicated than starting the service, because we need to handle the process of graceful shutdown. Graceful shutdown ensures that the server completes any in-progress requests before shutting down. The following is a way to achieve graceful shutdown:

  1. Modify the service definition

First, we need to add a shutdown channel to the MyService structure:

type MyService struct {
    httpServer *http.Server
    stopChan   chan os.Signal
}
Copy after login

This closed channel will be used to notify the server when to stop. We also need to modify the NewMyService function so that the closing channel is added to the service instance:

func NewMyService(port string) *MyService {
    stopChan := make(chan os.Signal, 1)
    signal.Notify(stopChan, os.Interrupt, syscall.SIGTERM)

    return &MyService{
        httpServer: &http.Server{
            Addr: fmt.Sprintf(":%s", port),
        },
        stopChan: stopChan,
    }
}
Copy after login

Here we define a pipe named stopChan and Use the signal.Notify function to add the operating system's termination signal (such as ctrl-c) to the channel. We then add the pipeline to the service instance.

  1. Modify the Run method

Next, we need to modify the Run method. We will use a goroutine in this method to listen to close the channel, and if the channel receives a signal, stop the http.Server and close the function:

func (svc *MyService) Run() error {
    go func() {
        <-svc.stopChan
        ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
        defer cancel()
        svc.httpServer.Shutdown(ctx)
    }()

    return svc.httpServer.ListenAndServe()
}
Copy after login

Here, we close the channel by using context.WithTimeout The method defines a TimeoutContext to ensure that http.Server has enough time to complete the request being processed. We then call http.Server's Shutdown method to stop the running server. Finally, we listen to the pipe in the goroutine, wait for the shutdown notification, and use that notification to perform a graceful shutdown.

  1. Stop the service

Now we just need to create the new service instance in the client code, call its Run method and wait for ctrl-c Or other termination signal:

svc := NewMyService("8080")
err := svc.Run()
if err != nil {
    fmt.Printf("Failed to start service: %s", err)
    return
}

// wait for shutdown signal
Copy after login

Here, we create the service instance and call its Run method. Then we just need to wait for ctrl-c or other termination signal.

Summary

In this article, we learned how to write code to start and stop services using golang to provide a stable and graceful shutdown experience for your application. Whether you are writing a web service, a RESTful API, or any other type of service, these technologies will have a positive impact on the reliability and stability of your application.

The above is the detailed content of golang start and stop service. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template