{"id":9101,"date":"2026-08-03T17:10:38","date_gmt":"2026-08-03T08:10:38","guid":{"rendered":"https:\/\/hasu0707.duckdns.org\/blog\/?p=9101"},"modified":"2026-08-03T17:10:39","modified_gmt":"2026-08-03T08:10:39","slug":"go-%ec%96%b8%ec%96%b4-%ec%84%a4%ec%b9%98-%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8","status":"publish","type":"post","link":"https:\/\/hasu0707.duckdns.org\/blog\/?p=9101","title":{"rendered":"go \uc5b8\uc5b4 \uc124\uce58 \uc2a4\ud06c\ub9bd\ud2b8"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/usr\/bin\/env bash\n# ------------------------------------------------------------------\n# go \uc5b8\uc5b4 \uac1c\ubc1c\ud658\uacbd \uad6c\ucd95 \uc2a4\ud06c\ub9bd\ud2b8\n# ------------------------------------------------------------------\n\n# \uc2a4\ud06c\ub9bd\ud2b8 \uc624\ub958 \ubc1c\uc0dd \uc2dc \uc989\uc2dc \uc911\ub2e8\nset -euo pipefail\n\n# 1. \uc0c9\uc0c1 \uc815\uc758 (\ucd9c\ub825\uc6a9)\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nNC='\\033[0m' # No Color\n\nlog_info() { echo -e \"${GREEN}[INFO]${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}[WARN]${NC} $1\"; }\nlog_err()  { echo -e \"${RED}[ERROR]${NC} $1\"; }\n\n# ------------------------------------------------------------------\n# [\uc2e0\uaddc \ucd94\uac00] \ud544\uc218 \uba85\ub839\uc5b4 \uc874\uc7ac \uc5ec\ubd80 \uac80\uc0ac \ub8e8\ud2f4\n# ------------------------------------------------------------------\ncheck_required_commands() {\n    local missing_cmds=()\n    # \uc2a4\ud06c\ub9bd\ud2b8 \ub3d9\uc791 \ubc0f \uae30\ubcf8 \ub2e4\uc6b4\ub85c\ub4dc\/\ud574\uc81c\uc5d0 \ud544\uc218\uc801\uc778 \ub3c4\uad6c\ub4e4\n    local required_cmds=(\"curl\" \"tar\" \"uname\" \"grep\" \"cat\")\n\n    for cmd in \"${required_cmds[@]}\"; do\n        if ! command -v \"$cmd\" &amp;> \/dev\/null; then\n            missing_cmds+=(\"$cmd\")\n        fi\n    done\n\n    if [ ${#missing_cmds[@]} -ne 0 ]; then\n        log_err \"\uc2a4\ud06c\ub9bd\ud2b8 \uc2e4\ud589\uc5d0 \ud544\uc694\ud55c \ud544\uc218 \uba85\ub839\uc5b4\uac00 \uc2dc\uc2a4\ud15c\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4.\"\n        log_err \"\ub204\ub77d\ub41c \uba85\ub839\uc5b4: ${missing_cmds[*]}\"\n        log_err \"\ud574\ub2f9 \ub3c4\uad6c\ub4e4\uc744 \uba3c\uc800 \uc124\uce58\ud55c \ud6c4 \ub2e4\uc2dc \uc2e4\ud589\ud574 \uc8fc\uc138\uc694.\"\n        exit 1\n    fi\n}\n\n# \ud544\uc218 \uba85\ub839\uc5b4 \uac80\uc0ac \uc2e4\ud589\ncheck_required_commands\n# ------------------------------------------------------------------\n\n# 2. \ub8e8\ud2b8\/sudo \uad8c\ud55c \ud655\uc778\nif [ \"$EUID\" -ne 0 ]; then\n    log_err \"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub294 root \uad8c\ud55c \ub610\ub294 sudo\ub85c \uc2e4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4.\"\n    exit 1\nfi\n\n# \uc2e4\uc81c \uc0ac\uc6a9\uc790 \uacc4\uc815 \ud0d0\uc0c9 (sudo \uc2e4\ud589 \uc2dc \uc6d0\ubcf8 \uc0ac\uc6a9\uc790 \ud30c\uc545)\nSUDO_USER_NAME=\"${SUDO_USER:-$USER}\"\nUSER_HOME=$(eval echo \"~$SUDO_USER_NAME\")\n\n# 3. OS \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790 \uac10\uc9c0 \ubc0f \ube4c\ub4dc \ud544\uc218 \ud328\ud0a4\uc9c0 \uc124\uce58\nlog_info \"OS \ubc0f \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790 \ud655\uc778 \uc911...\"\n\nif command -v apt-get &amp;> \/dev\/null; then\n    log_info \"Debian\/Ubuntu \uacc4\uc5f4\uc774 \uac10\uc9c0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud328\ud0a4\uc9c0\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4...\"\n    apt-get update -y\n    apt-get install -y curl tar git build-essential\nelif command -v dnf &amp;> \/dev\/null; then\n    log_info \"Rocky Linux \/ RHEL \uacc4\uc5f4\uc774 \uac10\uc9c0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud328\ud0a4\uc9c0\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4...\"\n    dnf install -y curl tar git gcc make\nelse\n    log_err \"\uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 OS \ud658\uacbd\uc785\ub2c8\ub2e4. (apt-get \ub610\ub294 dnf \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790\uac00 \ud544\uc694\ud569\ub2c8\ub2e4)\"\n    exit 1\nfi\n\n# 4. \ucd5c\uc2e0 Go \ubc84\uc804 \uc815\ubcf4 \uac00\uc838\uc624\uae30\nlog_info \"Go \uc5b8\uc5b4 \ucd5c\uc2e0 \ubc84\uc804\uc744 \ud655\uc778\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4...\"\nLATEST_GO_VERSION=$(curl -s https:\/\/go.dev\/VERSION?m=text | head -n 1)\n\nif [ -z \"$LATEST_GO_VERSION\" ]; then\n    log_warn \"\ucd5c\uc2e0 \ubc84\uc804\uc744 \uac00\uc838\uc624\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uae30\ubcf8 \ubc84\uc804\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4 (go1.22.5).\"\n    LATEST_GO_VERSION=\"go1.22.5\"\nfi\n\nARCH=$(uname -m)\ncase \"$ARCH\" in\n    x86_64) GO_ARCH=\"amd64\" ;;\n    aarch64|arm64) GO_ARCH=\"arm64\" ;;\n    *) log_err \"\uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 \uc544\ud0a4\ud14d\ucc98\uc785\ub2c8\ub2e4: $ARCH\"; exit 1 ;;\nesac\n\nGO_TARBALL=\"${LATEST_GO_VERSION}.linux-${GO_ARCH}.tar.gz\"\nDOWNLOAD_URL=\"https:\/\/go.dev\/dl\/${GO_TARBALL}\"\n\n# 5. \uae30\uc874 Go \uc124\uce58 \uc81c\uac70 \ubc0f \ubc14\uc774\ub108\ub9ac \ub2e4\uc6b4\ub85c\ub4dc\nlog_info \"\uae30\uc874 Go \uc124\uce58(\uc788\uc744 \uacbd\uc6b0)\ub97c \uc815\ub9ac\ud569\ub2c8\ub2e4 (\/usr\/local\/go)...\"\nrm -rf \/usr\/local\/go\n\nlog_info \"${LATEST_GO_VERSION} (${GO_ARCH}) \ub2e4\uc6b4\ub85c\ub4dc \uc911: ${DOWNLOAD_URL}\"\ncurl -sSL -O \"$DOWNLOAD_URL\"\n\nlog_info \"\/usr\/local \uc5d0 Go \uc555\ucd95\uc744 \ud574\uc81c\ud569\ub2c8\ub2e4...\"\ntar -C \/usr\/local -xzf \"$GO_TARBALL\"\nrm -f \"$GO_TARBALL\"\n\n# 6. \uc0ac\uc6a9\uc790 \ud658\uacbd\ubcc0\uc218(.bashrc) \uc124\uc815\nSHELL_CONFIG=\"${USER_HOME}\/.bashrc\"\n\nlog_info \"${SUDO_USER_NAME} \uc0ac\uc6a9\uc790\uc758 ${SHELL_CONFIG} \uc5d0 \ud658\uacbd\ubcc0\uc218\ub97c \uc124\uc815\ud569\ub2c8\ub2e4...\"\n\n# \uc774\ubbf8 \uc124\uc815\ub41c \uac12\uc774 \uc788\ub294\uc9c0 \ud655\uc778 \ud6c4 \ub4f1\ub85d\nif ! grep -q \"export PATH=\\x24PATH:\/usr\/local\/go\/bin\" \"$SHELL_CONFIG\"; then\n    cat &lt;&lt; 'EOF' >> \"$SHELL_CONFIG\"\n\n# Go Development Environment\nexport PATH=$PATH:\/usr\/local\/go\/bin\nexport GOPATH=$HOME\/go\nexport PATH=$PATH:$GOPATH\/bin\nEOF\nfi\n\n# GOPATH \ub514\ub809\ud130\ub9ac \uc0dd\uc131 \ubc0f \uad8c\ud55c \uc124\uc815\nchown -R \"$SUDO_USER_NAME\":\"$SUDO_USER_NAME\" \/usr\/local\/go\nsu - \"$SUDO_USER_NAME\" -c \"mkdir -p $USER_HOME\/go\/{src,pkg,bin}\"\n\nlog_info \"==========================================\"\nlog_info \" Go \uac1c\ubc1c\ud658\uacbd \uad6c\ucd95\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4! \"\nlog_info \"==========================================\"\nlog_info \"\uc124\uce58\ub41c \ubc84\uc804: $(\/usr\/local\/go\/bin\/go version)\"\nlog_info \"\"\nlog_warn \"\ud604\uc7ac \ud130\ubbf8\ub110 \uc139\uc158\uc5d0 \ud658\uacbd\ubcc0\uc218\ub97c \uc801\uc6a9\ud558\ub824\uba74 \uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uc138\uc694:\"\necho -e \"${GREEN}source ~\/.bashrc${NC}\"<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[39,18],"tags":[],"class_list":["post-9101","post","type-post","status-publish","format-standard","hentry","category-os_linux_unix_macos","category-development_language"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/9101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9101"}],"version-history":[{"count":0,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/9101\/revisions"}],"wp:attachment":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}