init
This commit is contained in:
		
							
								
								
									
										36
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										23
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							@@ -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"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
							
								
								
									
										26
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					# DevContainer测试应用
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					这是一个简单的Go应用,用于测试DevContainer功能。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 功能
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 提供一个基本的HTTP服务器
 | 
				
			||||||
 | 
					- 显示服务器时间和请求信息
 | 
				
			||||||
 | 
					- 包含健康检查端点(/health)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 使用方法
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. 在DevStar中启动该DevContainer
 | 
				
			||||||
 | 
					2. 容器启动后,访问映射的端口(默认8080)
 | 
				
			||||||
 | 
					3. 你应该能看到一个简单的问候页面
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 开发
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DevContainer已经配置好了Go开发环境,包括:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Go语言支持
 | 
				
			||||||
 | 
					- 代码补全
 | 
				
			||||||
 | 
					- 调试工具
 | 
				
			||||||
 | 
					- 常用命令行工具
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					只需在VS Code中打开,或通过DevStar提供的编辑器接口访问。
 | 
				
			||||||
							
								
								
									
										36
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							@@ -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))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user