Golang进行Windows开发相关知识点总结
毋庸置疑golang是跨平台的,直接将依赖包编译到可执行程序里,尽管包有点大,但布署起来特别方便。尤其是打包成服务在Windows上运行时省去了安装种种库的麻烦。
这里介绍Golang进行Windows开发的二个小技巧:
一、隐藏界面的形式在后台运行。
go build -ldflags "-H windowsgui" download.go
二、以Windows系统服务的形式安装在系统中。
这里为了方便查看程序是否真的在执行,在任务里在E盘创建了一个新的文件,test.txt。
package main
import (
"github.com/kardianos/service"
"github.com/jander/golog/logger"
"time"
"os"
)
type program struct{}
func (p *program) Start(s service.Service) error {
go p.run()
return nil
}
func (p *program) run() {
//
}
func (p *program) Stop(s service.Service) error {
return nil
}
/**
* MAIN函数,程序入口
*/
func main() {
svcConfig := &service.Config{
Name: "myService", //服务显示名称
DisplayName: "myService", //服务名称
Description: "我的测试服务", //服务描述
}
prg := &program{}
s, err := service.New(prg, svcConfig)
if err != nil {
logger.Fatal(err)
}
if err != nil {
logger.Fatal(err)
}
if len(os.Args) > 1 {
if os.Args[1] == "remove" {
s.Uninstall()
logger.Println("服务卸载成功")
return
}
}
state ,_ := s.Status()
if state == service.Status(1){
logger.Println("已启动!")
}else{
logger.Println("未启动!")
err := s.Install()
if err != nil {
logger.Println("服务安装失败:"+err.Error())
}else{
logger.Println("服务安装成功!")
}
errStart := s.Start()
if errStart != nil{
logger.Println("服务启动成功!")
}else{
logger.Println("启动成功!")
}
}
go Task(s)
err = s.Run()
if err != nil {
logger.Error(err)
}
}
func Task(s service.Service) {
file,err :=os.Create("E:/test.txt")
if err != nil{
println(err.Error())
}
file.Write([]byte("测试服务!"))
file.Close()
time.Sleep(100000)
}
以上编译运行后:
查看结果: