Go 언어 환경의 vim 구성에 대한 자세한 설명
1. 환경 준비:
시스템 환경 설명:
[root@docker golang]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@docker golang]# uname -a Linux docker 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [root@docker golang]#
플러그인 구성 과정에서 변경 사항을 관찰할 go 파일 준비:
//hellogolang.go package main import "fmt" func main() { fmt.Println("Hello Golang!") }
2. 플러그인 구성 경로:
1 , Vundle.vim:
#mkdir ~/.vim/bundle #git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
vimrc 구성: ~/.vimrc 파일을 생성하고(이 파일이 없는 경우) 파일 상단에 Vundle.vim에 대한 구성을 추가합니다:
set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required
현재 Vim은 Vundle.vim A 플러그인만 설치합니다. hellogolang.go를 편집하는 것은 일반 텍스트 파일을 편집하는 것과 다르지 않습니다. 모든 것이 여전히 Vim
2의 기본 속성입니다. vim-go
Vim-go는 현재 Golang 개발 환경 구축에 가장 널리 사용되는 vim 플러그인입니다. 여기에서는 vim-go를 핵심과 기반으로 사용하여 환경을 구축합니다. vim-go는 오픈 소스 Vim 플러그인 관리자를 사용하여 설치됩니다. gmarik/Vundle.vim은 현재 Pathan을 능가하는 가장 권장되는 Vim 플러그인 관리자입니다.
여기에서는 Vundle을 Vim의 플러그인 관리 도구로 사용합니다.
~/.vimrc를 편집하고 vundle#begin과 vundle#end 사이에 한 줄을 추가합니다.
Plugin 'fatih/vim-go'
Execute in Vim: PluginInstall,
Vundle.vim은 왼쪽 아래에 Vundle 설치 프로그램 미리 보기 하위 창을 엽니다. window 설치가 완료되면 프롬프트 메시지가 "완료!"로 변경됩니다.
이때 .vim/bundle 아래에 추가 vim-go 폴더가 있는 것을 확인할 수 있습니다:
$ ls .vim/bundle/ vim-go/ Vundle.vim/
이때 hellogolang.go를 구문 강조로 다시 편집하고 저장할 때 자동으로 포맷합니다(사용). $ GOBIN/gofmt)도 사용할 수 있지만 누락된 패키지 자동 가져오기 및 자동 완성과 같은 기타 고급 기능은 여전히 일부 항목을 계속 설치해야 합니다.
3. go.tools 바이너리 설치
vim-go 설치 지침에는 gocode, godef, goimports 등과 같은 필요한 모든 바이너리를 먼저 설치해야 한다고 나와 있습니다.
GoInstallBinaries를 통해 이러한 vim-go 종속 바이너리 도구는 $GOBIN 또는 $GOPATH/bin에 자동으로 다운로드되어 설치됩니다. (이 도구는 git 또는 hg에 따라 다르며 OS에 미리 설치되어 있어야 합니다.)
: GoInstallBinaries 실행은 대화형이므로 확인하려면 Enter를 눌러야 합니다.
vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/tonybai/go/bin vim-go: goimports not found. Installing code.google.com/p/go.tools/cmd/goimports to folder /home/tonybai/go/bin/ vim-go: godef not found. Installing code.google.com/p/rog-go/exp/cmd/godef to folder /home/tonybai/go/bin/ vim-go: oracle not found. Installing code.google.com/p/go.tools/cmd/oracle to folder /home/tonybai/go/bin/ vim-go: gorename not found. Installing code.google.com/p/go.tools/cmd/gorename to folder /home/tonybai/go/bin/ vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/tonybai/go/bin/ vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/tonybai/go/bin/
하지만 이러한 코드의 대부분은 코드에 있습니다. google.com 호스팅이므로 잘 알려진 이유로 vim-go 자동 설치가 실패할 가능성이 높으므로 위 로그에 언급된 각 도구의 소스 코드 주소에 따라 로컬로 다운로드하여 설치해야 합니다. 사다리를 만들 수 없는 경우 http://gopm.io를 통해 관련 패키지를 다운로드할 수 있습니다.
설치 후 $GOBIN 아래의 새로운 바이너리는 다음과 같습니다.
-rwxr-xr-x 1 tonybai tonybai 5735552 11?? 7 11:03 errcheck* -rwxr-xr-x 1 tonybai tonybai 9951008 11?? 7 10:33 gocode* -rwxr-xr-x 1 tonybai tonybai 5742800 11?? 7 11:07 godef* -rwxr-xr-x 1 tonybai tonybai 4994120 11?? 7 11:00 goimports* -rwxr-xr-x 1 tonybai tonybai 5750152 11?? 7 11:03 golint* -rwxr-xr-x 1 tonybai tonybai 6381832 11?? 7 11:01 gorename* -rwxr-xr-x 1 tonybai tonybai 2954392 11?? 7 10:38 gotags* -rwxr-xr-x 1 tonybai tonybai 9222856 11?? 7 11:01 oracle*
이 바이너리를 설치한 후 어떤 기능이 지원되는지 살펴보겠습니다.
hellogolang.go를 다시 편집하세요:
- 새 줄을 시작하고 fmt.를 입력한 다음 ctrl+x, ctrl+o를 누르면 Vim이 완료 프롬프트 드롭다운 상자를 표시하지만, 이는 완료 유형이 아닙니다. 실시간으로 따라오며, 이 완성은 gocode에 의해 제공됩니다.
– 코드 줄 입력: time.Sleep(time.Second), 실행: GoImports, Vim은 자동으로 시간 패키지를 가져옵니다.
– 커서를 Sleep 함수로 이동하고 다음을 실행하세요. GoDef 또는 명령 모드에서 gd를 입력하면 Vim은 $GOROOT/src/time/sleep.go에서 Sleep 함수의 정의를 엽니다. 실행: b 1은 hellogolang.go로 돌아갑니다.
– 실행: GoLint, 현재 Go 소스 파일에서 golint를 실행합니다.
– 실행: GoDoc을 실행하여 현재 커서 아래의 기호에 해당하는 Go 문서를 엽니다.
– 실행: GoVet, 현재 디렉터리의 현재 Go 소스 파일에 대해 go vet을 실행합니다.
– 실행: GoRun, 현재 기본 패키지를 컴파일하고 실행합니다.
– 실행: GoBuild, 소스 파일에 따라 현재 패키지를 컴파일하지만 GoBuild는 결과 파일을 생성하지 않습니다.
– GoInstall을 실행하여 현재 패키지를 설치합니다.
– GoTest를 실행하여 현재 경로에서 _test.go 파일을 테스트합니다.
– 실행: GoCoverage, 테스트 커버리지 결과 파일을 생성하고 브라우저를 열어 현재 패키지 상황을 표시합니다.
– GoErrCheck를 실행하여 현재 패키지에서 발견되지 않은 오류를 확인합니다.
– 실행: GoFiles를 실행하면 현재 패키지에 해당하는 소스 파일 목록이 표시됩니다.
– 실행: GoDeps, 현재 패키지의 종속 패키지 목록을 표시합니다.
– 실행: GoImplements, 현재 유형으로 구현된 인터페이스 목록을 표시합니다.
– 실행: GoRename [to], 현재 커서 아래의 기호를 [to]로 바꿉니다.
3. 기타 플러그인
아직 구현되지 않은 여러 기능이 있습니다. 핵심 사항은 다음과 같습니다.
– 실시간 코드 완성
– 코드 조각 지원
1. YCM 설치 (Your Complete Me )
~/.vimrc에 줄 추가:
Plugin 'Valloric/YouCompleteMe'
저장하고 종료한 후 ~/.vimrc를 열고 실행: PluginInstall
설치 후 다음 프롬프트 표시줄 프롬프트:
ycm_client_support.[so|pyd|dll] 및 ycm_core.[so|pyd|dll]이 감지되지 않습니다. 사용하기 전에 YCM을 컴파일해야 합니다!
YCM은 작성된 모듈입니다. C++에서는 성능이 최적화되었으므로 YCM의 지원 라이브러리를 수동으로 컴파일해야 합니다. 단계는 다음과 같습니다.
sudo yum install build-essential cmake python-dev cd ~/.vim/bundle/YouCompleteMe ./install.sh
Build (C++ 컴파일이 매우 느리기 때문에 잠시 기다려야 합니다.) 확인 후 hellogolang.go를 열면 실시간 완료 기능을 사용할 수 있습니다! 시원한!
2. UltiSnips를 설치하세요
Vim-go默认是用ultisnips引擎插件,但这个插件需要单独安装。同样,我们利用vundle来安装它,在~/.vimrc中添加一行:
Plugin 'SirVer/ultisnips'
保存,退出vim
打开vim,执行:PluginInstall
编辑hellogolang.go,按照go.snip中的说明,我们输入func后敲击tab键,我们发现期待的:
func name(params) type { }
并没有出现。反倒是YCM的下拉提示显示在那里让你选择。似乎是ultisnips和YCM的键组合冲突了。ultisnips官方说明也的确如 此。ultisnips默认是用Tab展开snippet的,而YCM中的Tab用来选择补齐项,我们可以通过设置来避免这些。
我们在.vimrc中添加如下setting:
" YCM settings let g:ycm_key_list_select_completion = ['', ''] let g:ycm_key_list_previous_completion = [''] let g:ycm_key_invoke_completion = '<C-Space>' " UltiSnips setting let g:UltiSnipsExpandTrigger="<tab>" let g:UltiSnipsJumpForwardTrigger="<c-b>" let g:UltiSnipsJumpBackwardTrigger="<c-z>"
这样让YCM通过回车和向下的箭头来做list item正向选择,通过向上箭头做反向选择。通过ctrl+space来原地触发补齐提示。
而ultisnips则是用tab做snippet展开,ctrl+b正向切换占位符,ctrl+z反向切换占位符。
四、.vimrc
前面讲到了vim-go有许多命令,在:xx模式下执行多显不便,于是你可以定义一些Mappings,比如:
" set mapleader let mapleader = "," " vim-go custom mappings au FileType go nmap <Leader>s <Plug>(go-implements) au FileType go nmap <Leader>i <Plug>(go-info) au FileType go nmap <Leader>gd <Plug>(go-doc) au FileType go nmap <Leader>gv <Plug>(go-doc-vertical) au FileType go nmap <leader>r <Plug>(go-run) au FileType go nmap <leader>b <Plug>(go-build) au FileType go nmap <leader>t <Plug>(go-test) au FileType go nmap <leader>c <Plug>(go-coverage) au FileType go nmap <Leader>ds <Plug>(go-def-split) au FileType go nmap <Leader>dv <Plug>(go-def-vertical) au FileType go nmap <Leader>dt <Plug>(go-def-tab) au FileType go nmap <Leader>e <Plug>(go-rename)
这样我们在命令模式下,输入<,>+
另外下面这个配置使得我们在save file时既可以格式化代码,又可以自动插入包导入语句(或删除不用的包导入语句)。
" vim-go settings let g:go_fmt_command = "goimports"
到这里,我们的Vim Golang开发环境就基本搭建好了。snippet+实时补齐让你Coding如飞!
五、.vimrc文件
下面是截至目前为止全量.vimrc文件的内容: set nocompatible " be iMproved, required filetype off " required colorscheme molokai " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' Plugin 'fatih/vim-go' Plugin 'Valloric/YouCompleteMe' Plugin 'SirVer/ultisnips' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required " set mapleader let mapleader = "," " vim-go custom mappings au FileType go nmaps (go-implements) au FileType go nmap i (go-info) au FileType go nmap gd (go-doc) au FileType go nmap gv (go-doc-vertical) au FileType go nmap r (go-run) au FileType go nmap b (go-build) au FileType go nmap t (go-test) au FileType go nmap c (go-coverage) au FileType go nmap ds (go-def-split) au FileType go nmap dv (go-def-vertical) au FileType go nmap dt (go-def-tab) au FileType go nmap e (go-rename) " vim-go settings let g:go_fmt_command = "goimports" " YCM settings let g:ycm_key_list_select_completion = ['', ''] let g:ycm_key_list_previous_completion = ['', ''] let g:ycm_key_invoke_completion = ' ' " UltiSnips settings let g:UltiSnipsExpandTrigger=" " let g:UltiSnipsJumpForwardTrigger=" " let g:UltiSnipsJumpBackwardTrigger=" "
更多golang知识请关注golang教程栏目。
위 내용은 Go 언어 환경의 vim 구성에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Go에서 함수 수명주기에는 정의, 로드, 연결, 초기화, 호출 및 반환이 포함됩니다. 변수 범위는 함수 수준과 블록 수준으로 구분됩니다. 함수 내의 변수는 내부적으로 표시되지만 블록 내의 변수는 블록 내에서만 표시됩니다. .

Go에서는 gorilla/websocket 패키지를 사용하여 WebSocket 메시지를 보낼 수 있습니다. 특정 단계: WebSocket 연결을 설정합니다. 문자 메시지 보내기: WriteMessage(websocket.TextMessage,[]byte("Message"))를 호출합니다. 바이너리 메시지 보내기: WriteMessage(websocket.BinaryMessage,[]byte{1,2,3})를 호출합니다.

Go에서는 정규식을 사용하여 타임스탬프를 일치시킬 수 있습니다. ISO8601 타임스탬프를 일치시키는 데 사용되는 것과 같은 정규식 문자열을 컴파일합니다. ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . regexp.MatchString 함수를 사용하여 문자열이 정규식과 일치하는지 확인합니다.

Go와 Go 언어는 서로 다른 특성을 지닌 서로 다른 개체입니다. Go(Golang이라고도 함)는 동시성, 빠른 컴파일 속도, 메모리 관리 및 크로스 플랫폼 이점으로 유명합니다. Go 언어의 단점은 다른 언어에 비해 생태계가 덜 풍부하고 구문이 더 엄격하며 동적 타이핑이 부족하다는 점입니다.

메모리 누수로 인해 파일, 네트워크 연결, 데이터베이스 연결 등 더 이상 사용하지 않는 리소스를 닫는 방식으로 Go 프로그램 메모리가 지속적으로 증가할 수 있습니다. 더 이상 강력하게 참조되지 않는 경우 약한 참조를 사용하여 메모리 누수 및 가비지 수집 대상 개체를 방지합니다. go 코루틴을 사용하면 메모리 누수를 방지하기 위해 종료 시 코루틴 스택 메모리가 자동으로 해제됩니다.

IDE를 사용하여 Go 함수 문서 보기: 함수 이름 위에 커서를 놓습니다. 단축키(GoLand: Ctrl+Q, VSCode: GoExtensionPack 설치 후 F1을 누르고 "Go:ShowDocumentation" 선택)를 누릅니다.

단위 테스트 동시 기능은 동시 환경에서 올바른 동작을 보장하는 데 도움이 되므로 매우 중요합니다. 동시 기능을 테스트할 때는 상호 배제, 동기화, 격리와 같은 기본 원칙을 고려해야 합니다. 동시 기능은 경쟁 조건을 시뮬레이션하고, 테스트하고, 결과를 확인하여 단위 테스트할 수 있습니다.

Golang에서 오류 래퍼를 사용하면 원래 오류에 상황별 정보를 추가하여 새로운 오류를 생성할 수 있습니다. 이는 다양한 라이브러리나 구성 요소에서 발생하는 오류 유형을 통합하여 디버깅 및 오류 처리를 단순화하는 데 사용할 수 있습니다. 단계는 다음과 같습니다. error.Wrap 함수를 사용하여 원래 오류를 새 오류로 래핑합니다. 새 오류에는 원래 오류의 상황별 정보가 포함됩니다. fmt.Printf를 사용하면 래핑된 오류를 출력하여 더 많은 컨텍스트와 실행 가능성을 제공할 수 있습니다. 다양한 유형의 오류를 처리할 때 오류 유형을 통합하려면 오류.Wrap 함수를 사용하세요.
