Golang 탄생
2006 first intel dual-core processor
2007 듀얼 코어의 이점을 취하기 위해 google에서 Go 개발 시작
설치
다운로드 받자. 항상 그렇지만 언어를 설치할 때는 기본 경로로 설정하는 것이 좋다. 용량 아끼겠다고 다른 곳에 설치하지 말자.
Go IDE로 대부분 VSCode를 추천한다. VSCode를 사용한다면 extension도 설치하자.
환경변수는 자동으로 설정 되어 있을 것이다. 터미널에서 go를 입력하여 작동하는지 결과를 보자. 커맨드 안내가 나오면 성공한 것이다.
go env 명령어를 통해 Go와 관련된 설정들을 확인할 수 있고, 아래와 같이 직접 환경 변수에서 찾을 수도 있다.
Go Path/module
1.16 버전부터 모듈이 기본 옵션이 되어(GO111MODULE이 on) GOPATH가 먹히지 않는다.
굳이 GOPATH를 사용하고 싶다면 GO111MODULE 환경변수를 off로 하면 GOPATH를 사용할 수 있다.
1.17부터는 GOPATH 지원을 완전히 없애고 모듈만 사용할 계획이라고 한다. 따라서 GO111MODULE 같은 녀석도 필요 없어지겠죠?
Go 1.16 이상 모듈 사용 (모듈 기본)
go 모듈 생성 => 실행 파일 생성 => exe 실행
// go 모듈 생성
go mod init [경로]
// 빌드
go build
// 실행
./[생성된 파일 이름]
1.16 이하 버전의 go를 사용하려고 할 때는 아래와 같이 진행했다.
Go 1.16 이하
GO PATH는 작업공간이라서 새로운 프로젝트를 할 때마다 (필요하다면) GOPATH를 바꿔주어야 한다.
GOPATH에 가면 다음 세 폴더가 존재해야 합니다. (src, pkg가 없는 경우도 있는데 직접 생성해줍시다.)
* workspace의 위치를 GOPATH라고 합니다.
bin: 소스 파일(패키지)를 컴파일하여 실행 파일(바이너리)이 생성되는 디렉터리입니다.
pkg: 패키지를 컴파일하여 라이브러리 파일이 생성되는 디렉터리입니다. pkg 디렉터리 아래에는 <운영체제>_<아키텍쳐> 형식으로 디렉터리가 생성됩니다. 64비트 리눅스라면 linux_amd64 디렉터리 아래에 라이브러리 파일이 생성됩니다.
src: 내가 작성한 소스 파일과 인터넷에서 자동으로 받아온 소스 파일이 저장되는 디렉터리입니다.
Node.js는 npm에서 패키지를 받고 Python은 pypi에서 받는다. 그러나 Go는 (go modules라는게 있긴하지만) 어디에서든 패키지를 다운로드 받을 수 있다. 그리고 이 패키지를 폴더별로 관리해야 한다. 관습적으로 Gopath/src 파일 내부에 다운로드 받은 도메인 별로 정리하곤한다.
관습적으로, github나 gitlab으로 관리를 한다면 Go Path의 src에 github.com/gitlab.com 폴더를 만들고 그 내부에 본인의 깃허브 유저명을 한 폴더를 또 만들자. 그 곳이 Go 프로젝트를 작성할 수 있는 공간으로 사용하는 것이 깔끔하고 찾아보기 쉽다. 필자의 경우 C:\Users\BOSSMONSTER\go\src\github.com\DarrenKwonDev가 되었다.
🚀 main.go
이곳에서 main.go 파일을 생성하고 VSCode를 켜서 추천하는 설치, 업데이트를 전부 다 해주자.
main.go는 컴파일을 할 것이라는 의미이다. (너무 당연해서 생략했는데 Go는 정적 컴파일 언어다. 인터프리터 언어가 아니다. 애초에 조상이 C인 녀석이다)
때때로 컴파일이 필요없는 프로젝트를 할 수 있을텐데 (대표적으로 코드 뭉치를 만들어 패키지를 만든다던지)
그럴 때는 이름을 main.go로 지을 필요는 없다. colly같은 경우 오픈 소스라서 main.go가 없다. 그러나, 컴파일을 할 것이라면 main.go라는 이름으로 만들어주자.
'Programming Language > 🐿️ Go (Golang)' 카테고리의 다른 글
Go의 기초 문법 (2) : 반복문 for, range, 조건문 if, switch (0) | 2021.05.14 |
---|---|
Go의 기초 문법 (1) : 변수, iota, 함수, 타입, underlying type,... (0) | 2021.05.14 |
Go 패키지 & Go 모듈 (0) | 2021.05.13 |
문자, 문자열 특집 : rune 타입과 string 관련 trick (0) | 2021.05.11 |
Go Routine (2) : 내부 쓰레드 통신 Channels (0) | 2020.12.11 |