后端开发工程师的开发环境配置(Vscode+C/Go/Python等)

摘要:
前言:我是一名后端开发工程师,我的主要语言是C、Go和Python。早期,C是在Windows下开发的。Soueinsight一直被使用。特别是已经更新多年的4.0版本,解决了中文乱码等问题。它更容易使用。后来,它在Mac下开发。虽然可以用葡萄酒运行windows程序,但总是很尴尬。是时候进行一些新的尝试了。为了统一家庭和公司的开发环境,开发工具的要求应该首先
前言

        我是一名后端开发工程师,主要语言是C、Go、Python。早年做C开发的时候都是在windows下开发,一直使用的是soure insight,尤其是时隔多年更新的4.0版本解决了中文乱码等问题,用起来更是得心应手。后来转到Mac下开发,虽然可以用wine运行windows程序,但总感觉别扭,也是时候做一些新的尝试了。

        为了家里和公司开发环境的统一,对开发工具的要求首先就是要跨平台,slickedit、clion、understand、sublime、atom我都尝试过,最终我选择了vscode。主要几个原因:支持多种语言开发;官方支持中文;插件安装方便;完全免费(公司不允许安装盗版软件);运行速度快;支持远程开发;颜值较高。萝卜白菜各有所爱,适合自己的才是最重要的。

        vscode不是IDE,需要安装各种依赖的插件和配置才能很好的工作,因此和soure insight的开箱即用,适应起来需要些时间。经过这几年的发展vscode以及很强大了,但作为C开发它还是有一些不足,例如不能像soure insight显示函数调用关系图(注,这里说的是关系图,查找函数在哪里被调用是没问题的),目前我是使用doxygen+graphviz工具作为补充工具。understand在这方面做的比较好,如果在家里看代码的话我也会配合着使用。

本文将以windows下为例做配置说明,其他系统下类似。最后,欢迎大家讨论和转载,本文也会持续更新。转载请注明来源:https://www.cnblogs.com/realjimmy/p/12990433.html

一、插件安装

我用到的开发语言包括C、Go、Python、Shell、Lua、Mysql。这是我安装的所有插件,其中Remote是用于远程开发(下面会有专门的章节介绍),Setting Sync用于vscode配置的备份,可在不同设备间同步,其他的根据插件名字基本都能明白其作用,这里就不做过多解释,各位可以根据自己的需求增删插件。

clipboard

clipboard

有的插件还需要安装其他额外的辅助工具,比如在打开c文件时,会自动下载clang-format等工具;打开go文件时会自动安装gotools,需要注意的是gotools安装特别慢,经常一轮安装下来总有几个装不上,不过也没有关系,多试几次总能成功。

二、各种语言开发环境

本章节主要是基础开发环境的配置,包括依赖编译工具等,具体的vscode配置会在第三章介绍。

2.1 C语言开发基础环境

2.1.1 安装Mingw-w64(仅windows需要)

编译代码、代码调试都需要用到。

下载地址:https://sourceforge.net/projects/mingw-w64/files/

clipboard

选择适合自己的版本。

  • i686 的是32位版,x86_64 的是64位版
  • posix和win32是os接口类型
  • sjlj/seh/dwarf 是异常处理方案,具体的差异可以自行百度

seh :支持64位,新,性能比较好

sjlj :支持64+32位,旧,稳定性好。

dwarf :支持32位

我选择,x86_64-posix-seh。安装好后需要配置环境变量,如:C:mingw-w64mingw64in

2.1.2 安装Clang(仅windows需要)

语法检查需要用到,编译代码时可以用mingw的gcc,也可以用clang。这里我们直接下载编译好的安装包。

https://releases.llvm.org/download.html

clipboard

2.1.3 添加头文件目录

我的开发环境是windows下连到linux虚拟机下开发linux程序,因此很多标准库的头文件都会有波浪线报错,需要手动指定一下。

方法一:指定Mingw-w64里的头文件

能够去掉波浪线,但是对于printf这类函数的参数提示有点问题。

方法二(我使用此方法:从linux下拷贝头文件

例:将下面两个文件夹拷贝到windows下 D:/code/vscode-include/linux-c/usr/include

/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/

/usr/include/

接着我们在vscode的项目里指定头文件(换工作目录了需要重新指定),打开工程目录,打开C文件,选择win32-->编辑配置。

除了标准库外,项目里的其他头文件如果找不到也可以用这种方式添加。

clipboard

clipboard

指定头文件目录

clipboard

2.1.4 编译运行与调试

1)快速编译运行

如果是单个.c文件(比如测试代码),右键点run code即可运行(依赖CodeRunner插件)。

clipboard

2)使用gdb调试

涉及两个配置文件,tasks和launch。tasks可以被用来做编译,而launch用来执行编译好的文件。

首先配置tasks:

F1,输入tasks,选择配置任务

clipboard

我这里配置编译运行单个文件为例,几个注意事项:

  • label:这个任务的名词,一会儿在launch里配置的preLaunchTask(执行前的任务)名称要和这个一直。
  • command:编译执行的命令,我这里写的gcc,也可以是其他编译时要执行的命令。
  • arg:执行命令的参数,这里通过gcc的参数-o指定了编译后可执行文件的路径。
  • cwd:命令的目录,这里指向mingw64的bin命令。

clipboard

接着配置launch,

clipboard

clipboard

注意事项:

  • program:指定了运行时的程序,和task对应。
  • miDebuggerPath:指定gdb路径。
  • preLaunchTask:指定运行前的任务,即编译任务,与前面配置的task对应。

clipboard

现在可以开始调试代码了,在代码行号左边点击即可打断点,点绿色小三角或是F5开始编译、执行。

clipboard

在调试控制台可以输入gdb命令,格式:-exec <command>

clipboard

2.2 Go语言开发基础环境

2.2.1 下载Go安装包

根据不同操作系统自行下载

下载地址:

https://golang.google.cn/dl/
https://golang.org/
https://studygolang.com/dl

2.2.2 Go安装

【windows下部署】

1)安装注意路径不要有空格和中文,环境变量也会自动配置。

2)打开cmd输入go version,查看是否安装成功

3)配置$GOPATH和工作空间

在系统环境变量中添加$GOPATH变量,表示工作代码空间。

注:也可以使用go env -w 命令配置,但是如果有环境变量了则会报错。

在$GOPATH目录下创建以下三个目录

/src 存放源代码

/pkg 存放编译文件

/bin 存放执行文件

【Linux部署】

1)解压到/usr/local目录下

tar zxvf go1.13.4.linux-amd64.tar.gz

mv go /usr/local/

2)建立保存go工作目录,将是下载组件的默认路径

mkdir /root/go_src

3)设置环境变量

在root用户下执行 vim /etc/profile命令在末尾添加配置并保存

export GOPATH=/root/go_src

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

【Mac部署】

1)下载pkg安装包快速安装
2)根据shell类型修改,我用的是zsh,因此修改~/.zshrc文件
vi ~/.zshrc

export GOPATH=/root/go_src

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

4)重新登录session

为的是让环境变量生效,验证:
输入go version能看到版本信息,go env能看到正确的GOPATH路径

2.2.3 设置代理

通过go下载第三方库非常慢,可以通过设置代理来加速。
 
GO111MODULE设置为auto
这里先设置为auto,待使用中问题解决了在on。可以在got get的时候手动set GO111MODULE=on GOPROXY设置为https://goproxy.cn,direct
之所以在后面拼接一个direct,如果代理没有找到库,就在原地址里直接查询。
 
方法一:Go 1.13 及以上(推荐)
打开你的终端并执行
go env -w GO111MODULE=auto
go env -w GOPROXY=https://goproxy.cn,direct
注:也可以设置GO111MODULE=on,强制开始gomodule功能。如果设置auto,这样会根据目录情况决定gomodule是否开启。
其他设置代理的方法参考:https://goproxy.cn/

2.2.4 测试go工具

第一个go程序

在工作目录里创建hello.go

package main import "fmt" func main() { fmt.Printf("hello, world ") }

1)使用go run直接运行:

$go run ./hello.go

2)编译后运行,可执行文件为文件夹名

go build hello.go

./hello 

2.2.5 dlv调试工具安装

$ git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve

或者 go get github.com/derekparker/delve/cmd/dlv

$ cd $GOPATH/src/github.com/go-delve/delve

$ make install

2.3 Python开发环境搭建

2.3.1 下载安装python

下载地址:https://www.python.org/downloads/

根据提示安装即可。

2.3.2 设置国内pip资源

国内还有很多pip镜像源,可以根据个人的网络资源自由替换index-url和trusted-host的值。这里设置阿里云作为国内pip资源

【Linux下的配置文件】
编辑配置文件$HOME/pip/pip.conf,添加如下内容。如果配置文件不存在直接创建即可。
我们可以通过以下命令确认$HOME的具体路径echo $HOME
 
【Windows下的配置文件】
编辑配置文件%APPDATA%pippip.ini。
可以通过以下命令确认%APPDATA%的具体路径echo %APPDATA%
 
【Mac下的配置文件】
mkdir ~/.pip
vim ~/.pip/pip.conf
 
配置文件内容:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com
 

#index-url使用Alibaba的镜像源trusted-host = mirrors.aliyun.com

#trusted-host标记Alibaba的镜像源服务器为可信赖主机

2.3.3 安装更好的交互编程工具

pip install ipython

3 vscode配置

3.1 我的配置文件参考

直接贴出我的配置,部分没有注释的,可以看vscode给出的解释。

{
    //---------------【GO相关配置】-------------------
    "go.gopath": "D:/code/go",
    "go.goroot": "c:/go",
    "go.formatTool": "goimports", //可选格式化工具,看大家都选这个
    "go.useLanguageServer": true, //不开的话跳转很慢
    "go.lintOnSave": "off", //在保存代码时自动检查代码可以优化的地方,并给出建议
    "go.toolsGopath": "D://code/go", //第三方插件安装位置
    "go.testOnSave": false, //保存时执行go test
    "go.testFlags": [ //-v参数能保证执行go test时有输出
        "-v"
    ],
    //--------------【python相关配置】--------------
    //treu使用IntelliSense引擎,false使用Microsoft Python Analysis Engine
    "python.jediEnabled": true,
    "python.pythonPath": "C:/Users/jimmy/AppData/Local/Programs/Python/Python38/python.exe",
    "python.autoComplete.extraPaths": [
        //设置python的第三方库路径
        "C:/Users/jimmy/AppData/Local/Programs/Python/Python38/Lib/site-packages",
    ],
    "python.autoComplete.addBrackets": true, //自动补全函数带括号
    "python.formatting.provider": "yapf", //格式化引擎
    //--------------【C相关配置】------------------------
    "C_Cpp.updateChannel": "Default", //自动更新插件,设置Insiders为自动更新内部版本
    //c代码格式化方案
    "C_Cpp.clang_format_fallbackStyle": "{BasedOnStyle: LLVM, IndentWidth: 4, ColumnLimit: 0}",
    //---------------【配置文件同步】---------------------
    "sync.gist": "xxxx",//根据实际情况配置,这里不用手动配置,通过界面配置后会自动填写到这里
    "sync.quietSync": false,
    "sync.syncExtensions": true,
    //----------------【调试相关】--------------------
    //code-runner是否在终端中运行,但这回生成一个临时文件,可以在executorMap里删除(但删除文件有风险)
    "code-runner.runInTerminal": false,
    "code-runner.executorMap": {
        "c": "cd $dir && gcc $fileName -o D:/tmpFile/$fileNameWithoutExt && D:/tmpFile/$fileNameWithoutExt",
    },
    "debug.onTaskErrors": "abort", //控制在运行预启动任务后遇到错误时做法,abort退出
    //----------------【远程开发的目标设备】--------------------
    "remote.SSH.remotePlatform": {
        "192.168.25.129": "linux"
    },
    //----------------【保存文件时自动在文件首行添加注释】--------------------
    "fileheader.customMade": {
        "Author": "realjimmy", // 作者
        "LastEditTime": "Do not edit", // 文件最后编辑时间,保持不要修改,会自动替换
        "Blog": "https://www.cnblogs.com/realjimmy/",
        "Describe": "", // 描述信息
    },
    //----------------【path路径自动填充】--------------------
    "path-intellisense.extensionOnImport": true,
    //----------------【高亮插件配置】--------------------
    "highlightwords.colors": [
        {
            "dark": "yellow",
            "light": "yellow"
        },
        {
            "dark": "Cyan"
        },
        {
            "dark": "Pink"
        },
        {
            "dark": "LightGreen"
        },
        {
            "dark": "LightSteelBlue"
        },
        {
            "dark": "MediumOrchid"
        },
        {
            "dark": "cornflowerblue"
        },
        {
            "dark": "DarkOrange"
        },
    ],
    "highlightwords.box": {
        //实验结果:false全部填充,true仅填充外框
        "dark": false
    },
    //--------------------【shell格式化工具配置】--------------------
    "shellformat.path": "c:/Users/jimmy/.vscode/extensions/foxundermoon.shell-format-7.0.1/bin/shfmt_v3.1.0_windows_amd64.exe",
    //---------------【vscode其他配置】---------------------
    "editor.parameterHints.enabled": false, //输入时函数参数提示
    "editor.formatOnType": false, //输入一行时格式化代码
    "editor.formatOnPaste": false, //黏贴时格式化代码
    "editor.formatOnSave": true, //保存时格式化开关
    "editor.renderControlCharacters": true,
    "editor.rulers": [ //编辑器显示标尺
        80
    ],
    "editor.quickSuggestionsDelay": 1, //控制显示快速建议前的等待时间 (毫秒)
    "editor.snippetSuggestions": "top", //代码片段建议比如if时的代码片段建议,放在top
    "editor.fontSize": 18,
    "editor.renderWhitespace": "selection", //空白字符的显示方式
    "editor.renderLineHighlight": "all", //当前行高亮方式
    "editor.tokenColorCustomizations": {
        // "comments": {
        // // 设置字体样式加粗bold下划线underline斜体italic等
        // "fontStyle": "",
        // // 设置字体颜色
        // "foreground": "#4caee2"
        // }, // 注释
        //"keywords": "#0a0", // 关键字
        //"variables": "#f00", // 变量名
        //"strings": "#18170fbd", // 字符串
        //"functions": "#5b99fcc9", // 函数名
        "numbers": "#ff819c", // 数字
        "functions": {
            // 设置函数的字体样式 加粗 下划线 斜体等
            "fontStyle": "bold",
        },
    },
    "editor.suggestSelection": "first",
    "editor.hover.delay": 300, // 控制鼠标放在代码上悬停提示前的等待时间 (毫秒)
    "terminal.integrated.shell.windows": "C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe", //默认终端
    "window.zoomLevel": -1,
    "http.proxySupport": "off",
    // "terminal.integrated.fontFamily": "Menlo for Powerline",
    "terminal.integrated.rendererType": "dom",
    "explorer.confirmDragAndDrop": false,
    "workbench.colorCustomizations": {
        //选中文本的颜色
        "editor.selectionBackground": "#33609e",
        //当前相同文本高亮的颜色
        // "editor.selectionHighlightBackground": "#0d7c21",
        //鼠标所在行的颜色
        // "editor.lineHighlightBackground": "#00000000",
        "editor.lineHighlightBorder": "#033d4a",
    },
    "workbench.settings.useSplitJSON": true, //json配置时使用拆分json编辑器来显示默认配置
    "workbench.editor.revealIfOpen": true,
    "emmet.triggerExpansionOnTab": true,
    "git.path": "C:/Program Files/Git/bin/git.exe",
    "git.autofetch": false,
    "extensions.autoUpdate": true, //自动更新插件
}

 

3.2 配置备份和同步Settings-sync

vscode配置可谓是核心中的核心,如果日积月累的配置丢了是真的会哭,另外如果你有多台设备可以方便在不同设备间同步配置。

3.2.1 前期准备

原理是自动上传到github的gist里。因此需要用到github账号,

1)注册github.com账号

2)测试gist.github.com地址是否能访问,若没有FanQiang可以通过配置host指向gist.github.com来解决

例如windows下:

打开C:WindowsSystem32driversetchosts文件

在最后行添加192.30.253.118 gist.github.com

注:能够正常访问gist.github.com了后面的步骤才有意义。

3.2.1 Settings Sync插件配置

1)下载vscode里下载setting sync插件

clipboard

2)与github同步相关的配置

如果你曾经使用过,建议先清一下sync的配置。

vscode里按F1,Sync重置。

clipboard

执行同步上传快捷键 shift+alt+u,会弹出配置界面,点击Login With Github

打开网页认证github,显示Success即通过认证,此时会在配置里自动填写令牌。

clipboard

这里会自动创建访问github的令牌,并写入插件配置中(和传统方式建立的令牌不一样,在github页面上没有显示,不确定是不是临时的令牌,我有的时候会连不上)

clipboard

如果你是第一次使用,会提示创建gists,跟着向导配置就可以了。成功即可忽略下面步骤。

如果没有向导,继续按下面的步骤操作。

github上点击You gists

clipboard

clipboard

以下信息随意写,正文内容会在同步后被覆盖

clipboard

url里最后一串记就是GistId,记下来,需要在vscode里配置

clipboard

回到vscode页面,点击编辑配置

clipboard

将刚才复制的GistId填写上

clipboard

注意右边的令牌内容,在前面指向login with github的时候,登陆成功会自动生成并填写,如果后续要更改可以在github上通过以下方式:

clipboard              clipboard

clipboard

clipboard

此时会生成一个新的令牌。

3)配置同步及其他配置

执行shift+alt+u同步,会提示强制上传,点确定。终端输出以下信息表示同步完成

clipboard

我们在github上看到,原本的内容也已经被更新。这个工具提供的是同步配置、以及插件名称。不会把插件本身上传到github上。

clipboard

主要就两个快捷键,上传及下载

上传: Shift + Alt + U

下载:Shift + Alt + D

配置可以在高级选项里配置

clipboard

clipboard

4 远程开发方案

当你的代码不在本机,比如远端设备或虚拟机,用vim看代码不是所有人都适应,那还有哪些解决方案呢?在此之前我的方案是:1)在远端设备执行mount命令,将本机目录挂载到远端 2)在本机使用samba将远端目录挂载到本机。

本章节将提供另外两个由vscode支持的远程开发解决方案。

4.1 remote-ssh插件

最方便的远程开发方案,但目前只支持64位系统,对libc版本也有要求,centos7下测试没问题,centos6就报libc版本不对。

环境:vscode在windows,服务器在linux

1)安装remote-ssh插件

2)目标主机上安装git2.0以上(可选)

先用git --version查看版本,如果低于2.0,先卸载旧版

yum remove git

添加新源后安装新版

yum install -y https://centos7.iuscommunity.org/ius-release.rpm yum install -y git2u

3)将文件watches限制增加到最大值,这个跟vscode打开文件个数限制有关。

sudo vim /etc/sysctl.conf

增加一行放

fs.inotify.max_user_watches=524288

保存,最后在控制台执行

sudo sysctl -p

即可正常使用。

4)vscode连接

clipboard

5)点击vscode插件管理,在远程安装各种插件,如:

clipboard

5)为了方便最好通过ssh-key设置一下ssh免密登录。步骤略。

4.2 使用sftp插件

SFTP插件自动上传文件的方案,适用于非64位系统,或centos6等libc版本较低的系统。

clipboard

在.vscode文件夹下的sftp.json文件中配置对应的信息,对应参数如下

name:你可以随便起,建议纯英文。

host:你服务器端的Ip地址。

protocol:默认填写sftp即可。

port:默认填写22。

username:服务器端的用户名。

remotePath:服务器端存放本地代码和数据的路径。

password:服务器端的登录密码。

uploadOnSave:默认true。

syncMode:默认update

watcher:files可以默认为"/*",意思是监控当前文件夹下的所有文件,autoUpload,autoDelete也都默认为true,这样你在新增或删除任何东西的时候,本地和服务端都会实时保持同步

ignore:方式制定忽略同步的文件,比如一些很大的数据文件其实不需要被同步。

完成配置,在本地进行更改后点击ctrl+s进行保存,刷新服务端对应的代码文件,你会发现也被更新了。

5 快捷键说明

官方快捷键介绍:

https://code.visualstudio.com/docs/getstarted/keybindings

clipboard

这里直接贴出官方快PDF文档:

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf

6 恢复默认配置

有的时候vscode出现问题,卸载重装发现配置没有改变,你可能想要完整的恢复全新配置(包括插件),可以删除一下路径里的内容

插件存放目录:C:Usersjimmy.vscodeextensions

配置保存路径:C:UsersjimmyAppDataRoamingCode

7 结束语

本文章会随着后续使用不断更新,喜欢的可以关于一下我的博客。https://www.cnblogs.com/realjimmy/

免责声明:文章转载自《后端开发工程师的开发环境配置(Vscode+C/Go/Python等)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇curl使用Qt 操作excel报错下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Azkaban简介和使用

概述 为什么需要工作流调度系统 l 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序、hive脚本等 l 各任务单元之间存在时间先后及前后依赖关系 l 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行; 例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天...

JVM学习笔记之CodeCache

一. CodeCache简介 从字面意思理解就是代码缓存区,它缓存的是JIT(Just in Time)编译器编译的代码,简言之codeCache是存放JIT生成的机器码(native code)。当然JNI(Java本地接口)的机器码也放在codeCache里,不过JIT编译生成的native code占主要部分。 大致在JVM中的分布如下: 大家都知...

Linux/ubuntu目录解释

/bin:bin是binary(二进制)的缩写。这个目录是对UNIX系统习惯的沿袭,存放着使用者最经常使用的命令。例如:cp,ls,cat。 /boot:这里存放的是启动LINUX时使用的一些核心文件。 /dev:dev是device(设备)的缩写。这个目录下是所有LINUX的外部设备,其功能类似DOS下的.sys和Win下的.vxd。在LINUX中...

【python之路30】反射及模块

一、反射 1、反射的基本介绍: 反射是所有程序的专有名词,在java,C#语言中都存在反射,那么什么是反射呢? python中 的反射概括来说:是通过字符串的形式导入模块,并通过字符串的形式去模块中寻找函数并执行。 总结: 可以以字符串的形式去(某个)对象操作的成员。模块实际也是一个对象。 2、利用字符串来导入模块 根据用户输入的模块名(input)来导入...

VC项目配置基础 (VC6.0 和VC2005)

一.预处理宏 1. 通用宏 VC6.0中: Project Settingà C/C++à Preprocessor definitions VC2005中: 项目属性à 配置属性à C/C++à 预处理器定义 WIN32:指明是Window 32位系统的编译器,一般用作平台识别。 _MBCS/_UNICODE:指明该工程使用的字符集(多字节字符集/UN...

PCRE函数简介和使用示例【转】

PCRE函数简介和使用示例 标签:正则表达式listbuffercompilationnullperl 原文地址:http://blog.csdn.net/sulliy/article/details/6247155 PCRE是一个NFA正则引擎,不然不能提供完全与Perl一致的正则语法功能。但它同时也实现了DFA,只是满足数学意义上的正则。 P...