zoukankan      html  css  js  c++  java
  • golang版本管理工具gvm

    一、参考

    github: gvm

    二、安装gvm

    下载安装脚本 install_gvm.sh

    bash install_gvm.sh

    
    # 运行安装脚本
    
    ➜  goEnv ./install_gvm.sh
    
    Cloning from https://github.com/moovweb/gvm.git to /Users/yz/.gvm
    Created profile for existing install of Go at "/usr/local/go"
    Installed GVM v1.0.22
    
    Please restart your terminal session or to get started right away run
     `source /Users/yz/.gvm/scripts/gvm`
    
    # 更新环境变量
    
    ➜  goEnv source /Users/yz/.gvm/scripts/gvm
    
    # 查看gvm版本信息
    ➜  goEnv gvm version
    Go Version Manager v1.0.22 installed at /Users/yz/.gvm
    

    安装脚本内容如下:

    #!/usr/bin/env bash
    
    display_error() {
    	tput sgr0
    	tput setaf 1
    	echo "ERROR: $1"
    	tput sgr0
    	exit 1
    }
    
    update_profile() {
    	[ -f "$1" ] || return 1
    
    	grep -F "$source_line" "$1" > /dev/null 2>&1
    	if [ $? -ne 0 ]; then
    		echo -e "
    $source_line" >> "$1"
    	fi
    }
    
    check_existing_go() {
    
    	if [ "$GOROOT" = "" ]; then
    		if which go > /dev/null; then
    			GOROOT=$(go env | grep GOROOT | cut -d"=" -f2)
    		else
    			echo "No existing Go versions detected"
    			return
    		fi
    	fi
    	echo "Created profile for existing install of Go at $GOROOT"
    	mkdir -p "$GVM_DEST/$GVM_NAME/environments" &> /dev/null || display_error "Failed to create environment directory"
    	mkdir -p "$GVM_DEST/$GVM_NAME/pkgsets/system/global" &> /dev/null || display_error "Failed to create new package set"
    	mkdir -p "$GVM_DEST/$GVM_NAME/gos/system" &> /dev/null || display_error "Failed to create new Go folder"
    	cat << EOF > $GVM_DEST/$GVM_NAME/environments/system
    # Automatically generated file. DO NOT EDIT!
    export GVM_ROOT; GVM_ROOT="$GVM_DEST/$GVM_NAME"
    export gvm_go_name; gvm_go_name="system"
    export gvm_pkgset_name; gvm_pkgset_name="global"
    export GOROOT; GOROOT="$GOROOT"
    export GOPATH; GOPATH="$GVM_DEST/$GVM_NAME/pkgsets/system/global"
    export PATH; PATH="$GVM_DEST/$GVM_NAME/pkgsets/system/global/bin:$GOROOT/bin:$GVM_ROOT/bin:$PATH"
    EOF
    }
    
    BRANCH=${1:-master}
    GVM_DEST=${2:-$HOME}
    GVM_NAME="gvm"
    SRC_REPO=${SRC_REPO:-https://github.com/moovweb/gvm.git}
    
    [ "$GVM_DEST" = "$HOME" ] && GVM_NAME=".gvm"
    
    [ -d "$GVM_DEST/$GVM_NAME" ] && display_error 
        "Already installed! Remove old installation by running
    
        rm -rf $GVM_DEST/$GVM_NAME"
    
    [ -d "$GVM_DEST" ] || mkdir -p "$GVM_DEST" > /dev/null 2>&1 || display_error "Failed to create $GVM_DEST"
    [ -z "$(which git)" ] && display_error "Could not find git
    
      debian/ubuntu: apt-get install git
      redhat/centos: yum install git
      archlinux: pacman -S git
      mac:   brew install git
    "
    
    # Is gvm-installer being called from the origin repo?
    # If so, skip the clone and source locally!
    # This prevents CI from breaking on non-merge commits.
    
    GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
    
    if [[ -z "$GIT_ROOT" || "$(basename "$GIT_ROOT")" != "gvm" ]]
    then
      echo "Cloning from $SRC_REPO to $GVM_DEST/$GVM_NAME"
    
      git clone --quiet "$SRC_REPO" "$GVM_DEST/$GVM_NAME" 2> /dev/null ||
    	  display_error "Failed to clone from $SRC_REPO into $GVM_DEST/$GVM_NAME"
    else
      if [[ $GVM_DEST == *"$GIT_ROOT"* ]]
      then
        ln -s "$GIT_ROOT" "$GVM_DEST"
      else
        cp -r "$GIT_ROOT" "$GVM_DEST/$GVM_NAME"
      fi
    fi
    
    # GVM_DEST may be a non-relative path
    # i.e: gvm-installer master foo
    pushd . > /dev/null
    
    cd "$GVM_DEST/$GVM_NAME" && git checkout --quiet "$BRANCH" 2> /dev/null ||	display_error "Failed to checkout $BRANCH branch"
    
    popd > /dev/null
    
    [ -z "$GVM_NO_GIT_BAK" ] && mv "$GVM_DEST/$GVM_NAME/.git" "$GVM_DEST/$GVM_NAME/git.bak"
    
    source_line="[[ -s "${GVM_DEST}/$GVM_NAME/scripts/gvm" ]] && source "${GVM_DEST}/$GVM_NAME/scripts/gvm""
    source_file="${GVM_DEST}/$GVM_NAME/scripts/gvm"
    
    if [ -z "$GVM_NO_UPDATE_PROFILE" ] ; then
      if [ -n "$ZSH_NAME" ]; then
        update_profile "$HOME/.zshrc"
      elif [ "$(uname)" == "Linux" ]; then
        update_profile "$HOME/.bashrc" || update_profile "$HOME/.bash_profile"
      elif [ "$(uname)" == "Darwin" ]; then
        update_profile "$HOME/.profile" || update_profile "$HOME/.bash_profile"
      fi
    fi
    
    if [ -z "$GVM_NO_UPDATE_PROFILE" ] && [ "$?" != "0" ]; then
    	echo "Unable to locate profile settings file(Something like $HOME/.bashrc or $HOME/.bash_profile)"
    	echo
    	echo " You will have to manually add the following line:"
    	echo
    	echo "  $source_line"
    	echo
    fi
    
    echo "export GVM_ROOT=$GVM_DEST/$GVM_NAME" > "$GVM_DEST/$GVM_NAME/scripts/gvm"
    echo ". $GVM_ROOT/scripts/gvm-default" >> "$GVM_DEST/$GVM_NAME/scripts/gvm"
    check_existing_go
    [[ -s "$GVM_DEST/$GVM_NAME/scripts/gvm" ]] && source "$GVM_DEST/$GVM_NAME/scripts/gvm"
    echo "Installed GVM v${GVM_VERSION}"
    echo
    echo "Please restart your terminal session or to get started right away run"
    echo " \`source ${source_file}\`"
    echo
    
    
    

    三、安装go

    3.1 查看已经安装的go

    gvm list

    3.2 查看可以创建的go版本列表

    gvm listall

    3.3 创建特定版本的go

    gvm install go1.15.5

    3.4 使用特定版本的go

    gvm use go1.15.5

    但是只能在当前的终端中生效,重新打开新的终端,无法适用

    3.5 设置系统的特定版本go

    gvm use go1.15.5 --default

    新的终端,自动适用新的版本

  • 相关阅读:
    eclipse集成testng插件(离线安装方式+ 在线安装方式)
    javaw.exe in your current path的解决方法
    Java单元测试工具:JUnit4(四)——JUnit测试套件使用及参数化设置
    Java单元测试工具:JUnit4(三)——JUnit详解之运行流程及常用注解
    Java单元测试工具:JUnit4(二)——JUnit使用详解
    Java单元测试工具:JUnit4(一)——概述及简单例子
    MINA框架使用
    UDP/IP + NIO实现系统间通信
    UDP/IP+BIO/NIO/多播
    java分布式开发TCP/IP NIO无阻塞 Socket((基于消息方式实现系统间的通信) )
  • 原文地址:https://www.cnblogs.com/thewindyz/p/13952528.html
Copyright © 2011-2022 走看看