V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
main1234
V2EX  ›  Visual Studio Code

快疯了,使用 vscode 开发 go,环境变量问题,这个问题一直困扰好久

  •  
  •   main1234 · 77 天前 · 2716 次点击
    这是一个创建于 77 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 go1.21 开发,之前电脑有 1.19 版本

    1.21 版本安装到了/Users/zhuxiaoyu/Desktop/go121 目录中

    /etc/profile

    # System-wide .profile for sh(1)
    
    if [ -x /usr/libexec/path_helper ]; then
            eval `/usr/libexec/path_helper -s`
    fi
    
    if [ "${BASH-no}" != "no" ]; then
            [ -r /etc/bashrc ] && . /etc/bashrc
    fi
    export GOROOT=/Users/zhuxiaoyu/Desktop/go121
    export GOPATH=/Users/zhuxiaoyu/Desktop/gopath
    

    ~/.bash_profile

    export GOROOT=/Users/zhuxiaoyu/Desktop/go121
    export GOPATH=/Users/zhuxiaoyu/Desktop/gopath
    export GOBIN=$GOPATH/bin
    export PROTOBUF_HOME=/usr/local/protobuf
    export GO111MODULE=auto
    PATH=$PATH:$GOBIN:$PROTOBUF_HOME/bin
    

    ~/.zshrc

    export GOPATH=/Users/zhuxiaoyu/Desktop/gopath
    export GOROOT=/Users/zhuxiaoyu/Desktop/go121
    export GOBIN=$GOPATH/bin
    export PROTOBUF_HOME=/usr/local/protobuf
    export GO111MODULE=on
    export GETHBIN=/Users/zhuxiaoyu/Desktop/geth/build/bin
    

    go env

    GO111MODULE='auto'
    GOARCH='amd64'
    GOBIN='/Users/zhuxiaoyu/Desktop/gopath/bin'
    GOCACHE='/Users/zhuxiaoyu/Library/Caches/go-build'
    GOENV='/Users/zhuxiaoyu/Library/Application Support/go/env'
    GOEXE=''
    GOEXPERIMENT=''
    GOFLAGS=''
    GOHOSTARCH='amd64'
    GOHOSTOS='darwin'
    GOINSECURE=''
    GOMODCACHE='/Users/zhuxiaoyu/Desktop/gopath/pkg/mod'
    GONOPROXY=''
    GONOSUMDB=''
    GOOS='darwin'
    GOPATH='/Users/zhuxiaoyu/Desktop/gopath'
    GOPRIVATE=''
    GOPROXY='https://goproxy.cn,direct'
    GOROOT='/Users/zhuxiaoyu/Desktop/go121'
    GOSUMDB=''
    GOTMPDIR=''
    GOTOOLCHAIN=''
    GOTOOLDIR='/Users/zhuxiaoyu/Desktop/go121/pkg/tool/darwin_amd64'
    GOVCS=''
    GOVERSION='go1.21.0'
    GCCGO='gccgo'
    GOAMD64='v1'
    AR='ar'
    CC='clang'
    CXX='clang++'
    CGO_ENABLED='1'
    GOMOD=''
    GOWORK=''
    CGO_CFLAGS='-O2 -g'
    CGO_CPPFLAGS=''
    CGO_CXXFLAGS='-O2 -g'
    CGO_FFLAGS='-O2 -g'
    CGO_LDFLAGS='-O2 -g'
    PKG_CONFIG='pkg-config'
    GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/ys/nth2j_v53q55rqfkhvdfnj_80000gn/T/go-build2234700829=/tmp/go-build -gno-record-gcc-switches -fno-common
    

    vscode 的配置

    "go.alternateTools": {
            "go.goroot":"/Users/zhuxiaoyu/Desktop/go121",
            "go.gopath":"/Users/zhuxiaoyu/Desktop/gopath"
        }
    

    vscode 报错提示

    go: cannot find GOROOT directory: /Users/zhuxiaoyu/Desktop/gopath/go1.19.9
    

    都快疯了,到底这个 vscode 读的哪里的环境变量

    34 条回复    2024-08-29 13:31:17 +08:00
    main1234
        1
    main1234  
    OP
       77 天前
    ```
    2024-08-27 15:19:02.940 [info] Installing github.com/cweill/gotests/[email protected] FAILED
    2024-08-27 15:19:02.940 [info] {
    "code": 2,
    "killed": false,
    "signal": null,
    "cmd": "/Users/zhuxiaoyu/Desktop/go121/bin/go install -v github.com/cweill/gotests/[email protected]",
    "stdout": "",
    "stderr": "go: downloading github.com/cweill/gotests v1.6.0\ngo: cannot find GOROOT directory: /Users/zhuxiaoyu/Desktop/gopath/go1.19.9\n"
    }
    ```
    zand1984
        2
    zand1984  
       77 天前
    echo $PATH 看看呢?
    另外推荐 brew 来安装 go ,gvm 来切换 go 版本。没有切换版本需求就不装 gvm ,只用 brew 更新到 latest
    zysuper
        3
    zysuper  
       77 天前
    billbur
        4
    billbur  
       77 天前
    你如果是用 vscode 运行,可以检查一下右下角显示的版本是否对的
    main1234
        5
    main1234  
    OP
       77 天前
    @billbur 版本是对的,1.21
    main1234
        6
    main1234  
    OP
       77 天前
    @zysuper 我不用 1.19 了,不需要安装 19
    zysuper
        7
    zysuper  
       77 天前
    @main1234 不是你用不用 1.19, 而是你的 vscode 用到的 gotests 找不到 go1.19.9, 所以报错了。
    billbur
        8
    billbur  
       77 天前
    @main1234 #5 go clean 清一下缓存呢,实在不行都重装吧😏
    deplives
        9
    deplives  
       77 天前
    我不用 Windows ,不会解决
    但是感叹一句,Windows 对开发人员其实真的不友好。
    之前写 Python ,连个 pyenv 都不支持。整个虚拟环境整了几天。真是麻了
    main1234
        10
    main1234  
    OP
       77 天前 via Android
    @deplives 你怎么看出来我用的是 Windows ??
    main1234
        11
    main1234  
    OP
       77 天前 via Android
    @billbur 破 vscode ,用公司电脑也有这个问题,不知道哪里错了,换 goland 了
    proxytoworld
        12
    proxytoworld  
       77 天前
    @deplives darwin 不是经典的 mac
    proxytoworld
        13
    proxytoworld  
       77 天前
    第一确认终端的 go 版本是否正确,第二在 vscode 终端看 go env ,第三或许可以用 strace...
    proxytoworld
        14
    proxytoworld  
       77 天前
    再不济 soft link 过去
    main1234
        15
    main1234  
    OP
       77 天前 via Android
    @proxytoworld 换 goland 了,vscode 报错的命令我在 cmd 中运行正常
    listenerri
        16
    listenerri  
       77 天前
    看一下 ~/.bashrc ?
    main1234
        17
    main1234  
    OP
       77 天前 via Android
    @listenerri 里面没东西
    Nazz
        18
    Nazz  
       77 天前
    配置 GOROOT, GOPATH, GOPROXY 就行了, 其它都是多余的
    johnwilson
        20
    johnwilson  
       77 天前
    goland 不香吗?
    deplives
        21
    deplives  
       77 天前
    @mrtanwen 不支持虚拟环境有啥用
    aw2350
        22
    aw2350  
       77 天前
    看下工作目录下的 goenv ,环境变量 从小到大,先取的 项目配置,再取项目目录的 env ,然后才向上取全局变量等。先在 项目目录下 打印 一下 gopath 和 goroot 的 env 变量值
    DefoliationM
        23
    DefoliationM  
       77 天前 via Android
    一顿操作猛如虎,然后连基本的配置都分不清。
    chesha1
        25
    chesha1  
       77 天前
    我也遇到过类似问题,不然别用本机环境变量了,直接写.vscode/launch.json 吧,这里的环境变量 100%能解决问题
    pkoukk
        26
    pkoukk  
       77 天前
    go 可以向下兼容,你的电脑上没必要保留两个版本的 go
    所以直接在官网下安装包无脑安装就行了,手动安装纯属给自己找麻烦
    https://go.dev/doc/install
    FengMubai
        27
    FengMubai  
       77 天前
    建议使用包管理器安装, 非常不建议把软件装在桌面
    iamperiod331www
        28
    iamperiod331www  
       77 天前
    "go.goroot": "/home/xxx/.deck/2.0/go-1.19.6",
    "go.gopath": "/home/xxx/gopath",

    试试
    iamperiod331www
        29
    iamperiod331www  
       77 天前
    不在`"go.alternateTools"` 层级下,直接在顶层
    valord577
        30
    valord577  
       77 天前
    vscode+go 环境 在 zsh 和 bash 配置中 不用单独 export GOPATH GOROOT 这些的

    只需要 export PATH=/opt/go/bin:$PATH 其他环境变量通过 go env -w ${key}=${value}

    vscode 也不需要设置 go.alternateTools

    还有一种可能性就是 环境变了需要重新 source 一下 mac 建议重启或者 logout 一下 防止有缓存
    we9ta
        31
    we9ta  
       77 天前 via iPhone
    {
    "go.gopath": "${env:HOME}/.gvm/pkgsets/go1.22.5/global",
    "go.goroot": "${env:HOME}/.gvm/gos/go1.22.5",
    "cSpell.words": ["gorm", "milli"],
    "editor.formatOnSave": true,
    "go.formatTool": "gofmt",
    "[go]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
    "source.organizeImports": "explicit"
    }
    },
    "[go.mod]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
    "source.organizeImports": "explicit"
    }
    }
    }



    Gvm 嘎嘎好用
    guanzhangzhang
        32
    guanzhangzhang  
       77 天前
    find /etc -type f -exec grep -l go1.19.9
    find / -type f -exec grep -l go1.19.9
    main1234
        33
    main1234  
    OP
       75 天前
    @DefoliationM 什么基本的配置??讲讲
    main1234
        34
    main1234  
    OP
       75 天前
    @we9ta 我现在也用 GVM 了,求问每次切版本时候,都要重新改下 go.gopath 和 go.goroot 么??有啥方便的办法么???另外用 GVM 怎么改 go env
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:34 · PVG 08:34 · LAX 16:34 · JFK 19:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.