Golang

go

发布静态网站并启动

  • 使用Go语言发布静态网站并自动打开浏览器 以下是一个完整的Go语言程序,它会:

    1. 启动静态文件服务器

    2. 自动打开默认浏览器访问网站

    3. 支持指定端口和目录

  • 完整代码

package main

import (
	"fmt"
	"net/http"
	"os"
	"os/exec"
	"path/filepath"
	"runtime"
	"time"
    "sync"
)

func main() {
	port := "8000"
	dir := "."

	// 解析命令行参数
	if len(os.Args) > 1 {
		dir = os.Args[1]
	}
	if len(os.Args) > 2 {
		port = os.Args[2]
	}

	absDir, _ := filepath.Abs(dir)
	url := fmt.Sprintf("http://localhost:%s", port)

    var wg sync.WaitGroup
	wg.Add(1)

	// 启动HTTP服务器
	go func() {
		fmt.Printf("Serving %s at %s\n", absDir, url)
		fmt.Println("Press Ctrl+C to stop")

		http.Handle("/", http.FileServer(http.Dir(dir)))
		if err := http.ListenAndServe(":"+port, nil); err != nil {
			fmt.Printf("Error starting server: %v\n", err)
			os.Exit(1)
		}
	}()

	// 给服务器一点时间启动
	time.Sleep(100 * time.Millisecond)

	// 打开浏览器
	if err := openBrowser(url); err != nil {
		fmt.Printf("Failed to open browser: %v\n", err)
	}

    // 等待HTTP服务器(实际上会一直运行,直到被中断)
    wg.Wait()
}

// openBrowser 根据操作系统打开默认浏览器
func openBrowser(url string) error {
	var cmd string
	var args []string

	switch runtime.GOOS {
	case "windows":
		cmd = "cmd"
		args = []string{"/c", "start", url}
	case "darwin":
		cmd = "open"
		args = []string{url}
	default: // "linux", "freebsd", "openbsd", "netbsd"
		cmd = "xdg-open"
		args = []string{url}
	}

	return exec.Command(cmd, args...).Start()
}
  • 使用方法

    1. 将代码保存为 `static_server.go`

    2. 编译为可执行文件:
      linux: GOOS=linux GOARCH=amd64 go build -o static-server-linux static-server.go
      macos: GOOS=darwin GOARCH=amd64 go build -o static-server-macos static-server.go
      windows: GOOS=windows GOARCH=amd64 go build -o static-server-windows.exe static-server.go

    3. 运行程序:

    • 默认使用当前目录,端口8000:
      static_server.exe

    • 指定目录和端口:
      static_server.exe C:\my_website 8080

  • 功能说明

    1. 程序启动后会立即打开默认浏览器访问网站

    2. 服务器会在后台持续运行,直到按Ctrl+C停止

    3. 支持跨平台(Windows、macOS、Linux)

    4. 自动显示服务的目录和访问URL

  • 注意事项

    • 如果端口被占用,程序会报错退出

    • 首次运行时防火墙可能会弹出警告,需要允许访问

    • 对于生产环境,建议使用专业的Web服务器如Nginx

这个解决方案比单纯的EXE文件更透明,您可以看到所有源代码,并且可以自行编译,更加安全可靠。

# go

## 发布静态网站并启动

- 使用Go语言发布静态网站并自动打开浏览器 以下是一个完整的Go语言程序,它会:
  1. 启动静态文件服务器
  2. 自动打开默认浏览器访问网站
  3. 支持指定端口和目录
- 完整代码

```go
package main

import (
	"fmt"
	"net/http"
	"os"
	"os/exec"
	"path/filepath"
	"runtime"
	"time"
    "sync"
)

func main() {
	port := "8000"
	dir := "."

	// 解析命令行参数
	if len(os.Args) > 1 {
		dir = os.Args[1]
	}
	if len(os.Args) > 2 {
		port = os.Args[2]
	}

	absDir, _ := filepath.Abs(dir)
	url := fmt.Sprintf("http://localhost:%s", port)

    var wg sync.WaitGroup
	wg.Add(1)

	// 启动HTTP服务器
	go func() {
		fmt.Printf("Serving %s at %s\n", absDir, url)
		fmt.Println("Press Ctrl+C to stop")

		http.Handle("/", http.FileServer(http.Dir(dir)))
		if err := http.ListenAndServe(":"+port, nil); err != nil {
			fmt.Printf("Error starting server: %v\n", err)
			os.Exit(1)
		}
	}()

	// 给服务器一点时间启动
	time.Sleep(100 * time.Millisecond)

	// 打开浏览器
	if err := openBrowser(url); err != nil {
		fmt.Printf("Failed to open browser: %v\n", err)
	}

    // 等待HTTP服务器(实际上会一直运行,直到被中断)
    wg.Wait()
}

// openBrowser 根据操作系统打开默认浏览器
func openBrowser(url string) error {
	var cmd string
	var args []string

	switch runtime.GOOS {
	case "windows":
		cmd = "cmd"
		args = []string{"/c", "start", url}
	case "darwin":
		cmd = "open"
		args = []string{url}
	default: // "linux", "freebsd", "openbsd", "netbsd"
		cmd = "xdg-open"
		args = []string{url}
	}

	return exec.Command(cmd, args...).Start()
}
```

- 使用方法
  1. 将代码保存为 `static_server.go`
  2. 编译为可执行文件:  
  linux:  `GOOS=linux GOARCH=amd64 go build -o static-server-linux static-server.go`  
  `macos: ``GOOS=darwin GOARCH=amd64 go build -o static-server-macos static-server.go`  
  `windows: ``GOOS=windows GOARCH=amd64 go build -o static-server-windows.exe static-server.go`
  3. 运行程序:
  - 默认使用当前目录,端口8000:  
  static_server.exe
  - 指定目录和端口:  
  static_server.exe C:\my_website 8080
- 功能说明
  1. 程序启动后会立即打开默认浏览器访问网站
  2. 服务器会在后台持续运行,直到按Ctrl+C停止
  3. 支持跨平台(Windows、macOS、Linux)
  4. 自动显示服务的目录和访问URL
- 注意事项
  - 如果端口被占用,程序会报错退出
  - 首次运行时防火墙可能会弹出警告,需要允许访问
  - 对于生产环境,建议使用专业的Web服务器如Nginx

这个解决方案比单纯的EXE文件更透明,您可以看到所有源代码,并且可以自行编译,更加安全可靠。