commit adefecc0bd9cdf40f24303cda70b8699d496e1c7 Author: panshuxiao Date: Sun Apr 6 19:52:57 2025 +0800 init diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..706346b --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,36 @@ +FROM golang:1.21-bullseye + +# 安装基本工具 +RUN apt-get update && apt-get install -y \ + git \ + curl \ + wget \ + vim \ + sudo \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# 创建一个非root用户 +ARG USERNAME=vscode +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +RUN groupadd --gid $USER_GID $USERNAME \ + && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME + +# Go工具设置 +ENV GOPATH=/go +ENV PATH=$GOPATH/bin:/usr/local/go/bin:$PATH +RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" "$GOPATH/pkg" \ + && chmod -R 777 "$GOPATH" \ + && go install -v golang.org/x/tools/gopls@latest \ + && go install -v github.com/go-delve/delve/cmd/dlv@latest \ + && go install -v honnef.co/go/tools/cmd/staticcheck@latest + +# 设置工作目录 +WORKDIR /workspace + +# 使用创建的非root用户 +USER $USERNAME \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..2d584af --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,23 @@ +{ + "name": "Go Dev Environment", + "build": { + "dockerfile": "Dockerfile", + "context": ".." + }, + "customizations": { + "vscode": { + "settings": { + "go.toolsManagement.checkForUpdates": "local", + "go.useLanguageServer": true, + "go.gopath": "/go" + }, + "extensions": [ + "golang.go", + "ms-vscode.go", + ] + } + }, + "forwardPorts": [8080], + "postCreateCommand": "go mod tidy", + "remoteUser": "vscode" + } \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f5f01f --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# DevContainer测试应用 + +这是一个简单的Go应用,用于测试DevContainer功能。 + +## 功能 + +- 提供一个基本的HTTP服务器 +- 显示服务器时间和请求信息 +- 包含健康检查端点(/health) + +## 使用方法 + +1. 在DevStar中启动该DevContainer +2. 容器启动后,访问映射的端口(默认8080) +3. 你应该能看到一个简单的问候页面 + +## 开发 + +DevContainer已经配置好了Go开发环境,包括: + +- Go语言支持 +- 代码补全 +- 调试工具 +- 常用命令行工具 + +只需在VS Code中打开,或通过DevStar提供的编辑器接口访问。 \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4c296e0 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module test-devcontainer + +go 1.23.3 diff --git a/main.go b/main.go new file mode 100644 index 0000000..1302aea --- /dev/null +++ b/main.go @@ -0,0 +1,36 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os" + "time" +) + +func main() { + // 获取环境变量或使用默认值 + port := os.Getenv("PORT") + if port == "" { + port = "8080" + } + + // 创建一个简单的HTTP服务器 + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + hostname, _ := os.Hostname() + fmt.Fprintf(w, "Hello from DevContainer!\n") + fmt.Fprintf(w, "Server time: %s\n", time.Now().Format(time.RFC1123)) + fmt.Fprintf(w, "Hostname: %s\n", hostname) + fmt.Fprintf(w, "Remote Address: %s\n", r.RemoteAddr) + fmt.Fprintf(w, "User-Agent: %s\n", r.UserAgent()) + }) + + http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, "Healthy") + }) + + // 启动服务器 + log.Printf("Starting server on port %s", port) + log.Fatal(http.ListenAndServe(":"+port, nil)) +} \ No newline at end of file