DevOps의 세계에 오신 것을 환영합니다! ? 오늘 저는 DevOps 작업을 위한 실용적인 프로그래밍에 대해 더 자세히 알아볼 수 있도록 또 다른 흥미로운 블로그로 돌아왔습니다. 이전 블로그에서는 DevOps 자동화의 기반을 마련한 3가지 Python 프로젝트를 살펴보았습니다.
이제 방향을 바꿔 Go-lang의 힘을 살펴보겠습니다! 이 블로그는 실용적이고 초보자에게 친숙한 3가지 Go-lang 프로젝트를 구축하는 방법을 안내합니다.
좋아하는 코드 편집기를 선택하고 시작해 보세요! ?
이러한 프로젝트를 구축하기 전에 환경이 설정되어 있고 준비가 되었는지 확인하세요. 필요한 것은 다음과 같습니다.
1. 고(고랑)
시스템에 Go가 설치되어 있어야 합니다. 운영 체제에 따라 다음 단계를 따르세요.
윈도우
go version
우분투
sudo apt update sudo apt install -y golang
go version
macOS
brew install go
go version
2. Go에 대한 기본 이해
전문가가 될 필요는 없지만 변수, 함수, 구조체와 같은 Go 개념에 대한 기본적인 이해가 있으면 원활하게 따라가는 데 도움이 됩니다. 바둑을 처음 접하신다면 바둑투어를 통해 빠르게 소개받으시길 추천드립니다.
이러한 전제 조건이 충족되면 멋진 Go-lang 프로젝트 구축을 시작할 준비가 된 것입니다! ?
첫 번째 프로젝트인 디스크 사용량 모니터링 도구로 여정을 시작하겠습니다. 이 프로그램은 시스템의 특정 디렉토리에 대한 디스크 사용량을 분석하는 데 도움이 됩니다.
내 GitHub 저장소에서 소스 코드를 찾을 수 있습니다. disk_usage.go라는 파일을 만들고 다음 코드를 추가하는 것부터 시작하겠습니다.
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
프로그램 진행 방식:
프로그램 운영
프로그램을 실행하려면 다음 명령을 사용하십시오.
go version
sudo apt update sudo apt install -y golang
파티션이 하나이기 때문에 다른 경로를 제공해도 같은 결과가 나옵니다.
이 프로젝트는 Go가 시스템의 기본 API와 어떻게 상호작용하여 시스템 모니터링 작업을 위한 훌륭한 출발점이 될 수 있는지 보여줍니다. ?
두 번째 프로젝트는 Go에서 포트폴리오 웹사이트를 호스팅하는 HTTP 서버를 만드는 것입니다. 이 프로젝트는 모니터링을 위해 상태 확인 엔드포인트를 통합하면서 정적 웹사이트를 구축하고 제공하는 방법을 보여줍니다.
내 GitHub 저장소에서 소스 코드를 찾을 수 있습니다.
HTTP 서버 구축 단계
go version
작동 방식
포트폴리오 홈페이지 제작
구조: static 폴더 내에서 다음을 생성합니다:
파일에 다음 콘텐츠를 추가하세요.
index.html:
brew install go
프로그램 운영
go version
상태 확인 액세스
서버 상태를 확인하려면 다음을 방문하세요.
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
이 프로젝트는 Go-lang을 사용하여 상태 확인 엔드포인트를 통한 추가 모니터링과 함께 정적 콘텐츠 호스팅을 위한 기능적인 웹 서버를 만드는 방법을 보여줍니다. ?
이 블로그의 마지막 프로젝트에서는 DevOps 도구 목록을 관리할 수 있는 RESTful API를 만들겠습니다. 이 프로그램은 Go의 net/http 패키지를 사용하여 RESTful 경로를 처리하고 데이터를 관리하는 방법을 보여줍니다.
전체 소스 코드는 내 GitHub 저장소에서 확인할 수 있습니다.
RESTful API 구축
1단계: 메인 프로그램
main.go라는 파일을 만들고 다음 코드를 추가하세요.
go version
2단계: 데이터 처리
도구 디렉터리에서 data.go라는 파일을 만들고 다음을 추가합니다.
sudo apt update sudo apt install -y golang
3단계: 처리기
도구 디렉터리에서 handler.go라는 이름의 다른 파일을 만들고 다음을 추가합니다.
go version
모듈 초기화
프로그램을 실행하기 전에 Go 모듈을 초기화하세요.
brew install go
이렇게 하면 프로젝트에서 프로젝트/도구 패키지를 사용할 수 있습니다.
프로그램 운영
다음을 실행하여 서버를 시작하세요.
go version
API 테스트
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
출력:
go run disk_usage.go /path/to/directory
go run disk_usage.go
출력:
package main import ( "fmt" "net/http" ) func healthCheckHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("OK")) } func main() { fs := http.FileServer(http.Dir("./static")) http.Handle("/", fs) http.HandleFunc("/health", healthCheckHandler) port := "8090" fmt.Printf("Starting server on port %s....", port) err := http.ListenAndServe(":"+port, nil) if err != nil { fmt.Println("Error starting server:", err) } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pravesh Sudha - Portfolio</title> <link rel="stylesheet" href="style.css"> </head> <body> <header> <div> <p><strong>style.css:</strong><br> </p> <pre class="brush:php;toolbar:false">body { font-family: Arial, sans-serif; margin: 0; padding: 0; line-height: 1.6; color: #333; background-color: #f9f9f9; } header { background: #4caf50; color: #fff; padding: 20px 0; text-align: center; } header .profile-picture { width: 150px; height: 150px; border-radius: 50%; margin-bottom: 15px; } header h1 { font-size: 2.5em; margin: 0; } header .subtitle { font-size: 1.2em; margin: 0; } main { padding: 20px; max-width: 800px; margin: 20px auto; background: #fff; border-radius: 8px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } main .about, main .links { margin-bottom: 20px; } main .links ul { list-style: none; padding: 0; } main .links li { margin: 10px 0; } main .links a { color: #4caf50; text-decoration: none; font-weight: bold; } main .links a:hover { text-decoration: underline; } footer { text-align: center; padding: 10px 0; background: #333; color: #fff; }
출력:
go run http_server.go
이 블로그에서는 소프트웨어 개발의 다양한 측면을 직접 경험하는 데 도움이 되는 세 가지 실용적인 Go 프로젝트를 살펴보았습니다. 디스크 사용량 모니터링부터 간단한 HTTP 서버 구축, 포트폴리오 웹사이트 호스팅, 마지막으로 DevOps 도구 관리를 위한 RESTful API 생성에 이르기까지 이러한 프로젝트는 Go 프로그래밍 기술을 연마하려는 모든 사람에게 견고한 기반을 제공합니다.
이러한 각 프로젝트는 실제 애플리케이션에 맞게 확장할 수 있는 구성 요소입니다. 시스템 모니터링, 웹 애플리케이션 개발, API 구축에 관심이 있다면 Go는 효율적인 개발에 필요한 단순성과 성능을 제공합니다.
? 더 많은 정보를 제공하는 블로그를 원하시면 Hashnode, X(Twitter) 및 LinkedIn에서 저를 팔로우하세요.
그때까지 즐거운 코딩하세요!!
즐거운 배움! ?
위 내용은 DevOps 여정을 시작하기 위해 Go-lang 프로젝트를 소개합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!