참고
니코쌤의 Go 강의
go를 아직 시작하기를 망설이고 있다면 또 아직 go가 설치되어있지 않다면 replit으로 언어를 먼저 체험해보고 시작해도 늦지 않다! 사용법은 페이지 들어가서 회원가입 후 replit 생성하여 언어만 선택하면 바로 만들어지니 어려울게 없어서 설명 생략하겠다!
go 홈페이지에 접속하여
다운로드 버튼을 눌러 설치를 진행하면 된다.
os 별로 설치를 진행할 수 있다.
go 설치 docs에서 각 os별로 설치 방법을 참고하여 진행하는 것을 추천한다!
window는 msi 파일을 다운받아 그냥 설치를 진행하면 된다... 설치를 모두 진행하면 window의 경우 c 드라이브에 go 파일이 생성되며 환경변수 PAHT에도 자동 추가된다.
설치가 완료된 이후
go version
명령어를 cmd에 실행하면
version을 확인할 수 있고 잘 설치가 진행되었다.
그리고 Go 폴더가 자동으로 생성되는데 이는 설치할때 옵션으로 수정할수도 있지만 그냥 진행을 하면 window의 경우
다음 위치로 저장된다.
환경변수로 잡힌 위치에 go 폴더를 생성해주던가 환경변수를 내가 생각하는 위치로 변경해서 사용하자! 나의 경우 C:\go
로 위치를 변경했다.
왜냐면 다른 언어와 다르게 Go는 위 디렉토리에서만 프로젝트를 생성하여 진행해야 실행이 되기 때문이다. 그래서 자신의 Go 폴더의 위치를 꼭 기억하자!
그리고 go는 java의 maven, gradle이나 node의 npm, python의 pypi와 같은 설치 레포지토리?의 개념이 없는데. 그 이유는 이러한 라이브러리들을 모두 설치하여 go 폴더에 넣어주면 go에서 사용할 수 있기 때문이다.
이점이 좀 다른 라이브러리를 가져다 쓸수 있다는 점에서는 좋았지만 개발자가 직접 다운로드를 진행하여 다 세팅해주어야한다는 것이 단점으로 보였다.
GOPATH로 지정한 경로의 go 폴더 내에 src 폴더를 생성한 뒤 자기 스타일에 맞게 코드를 정리할 수 있도록 패키지 분류를 하고 C:\go\src\github.com\project
나의 경우 다음과 같이 진행했는데 이 패키지의 의미는 github에서 다운로드한 라이브러리들을 저장하는 위치이고 해당 라이브러리를 사용하는 project들을 저 패키지안에 넣으려고 한다.
최종적으로 세팅된 내용이다.
그 후에 vscode를 사용하여 해당 폴더를 열고 main.go
파일을 생성하자
그럼 vscode에서 extension을 설치하라고 알림이 오는데 설치해주면 좋다.
다른 인스톨 메세지가 또 뜬다면 계속 인스톨하다보면 해당 메세지가 나오며 인스톨 창이 안뜨게 된다. 그럼 이제 준비가 되었다.
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
위 코드를
go run main.go
명령어를 통해 실행시켜보자.
다음과 같은 결과값을 확인할 수 있다!
go는 java랑 비슷한 점이 있었는데. 그것은 main만을 찾아서 실행시킨다는 것이다. 그런데 이 점은 컴파일
이 필요한 경우에만 작용하고 컴파일이 필요치 않다면 굳이 main 파일을 작성하지 않아도 된다.
main은 컴파일이 필요한 프로젝트에서만 사용된다. = 우리는 main을 쓴다.
하지만 공유하기 위한 소스는 main이 없다 = 왜냐면 컴파일을 안하고 소스만 가져다 쓸거기 때문!
그래서 위의 코드를 보면 이름부터 main.go
package main
func main(){}
들로 이루어져 있는 것을 확인할 수 있다. java와 비슷하게 main을 통해 어플리케이션이 시작되는 것이다.
위의 소를 또 다시 보면 fmt.Println()
의 Println()이 대문자로 시작하는 것을 확인할 수 있다. 이것은 go의 언어적 특징 때문인데. 대문자로 시작하는 func들을 public으로 열어지고 소문자로 시작하는 func는 private으로 닫혀지기 때문이다.
이 부분을 정확하게 확인하기 위해 import할 func들을 생성해보자
다음과 같이 utlis라는 패키지에 util.go 파일들을 생성해서 func들을 정의했다.
package utils
import "fmt"
func hello() {
fmt.Println("say hello")
}
func Hellow() {
fmt.Println("say hellow")
}
전체 코드는 다음과 같다.
그럼 이제 hello와 Hellow를 각각 불러보자
main에서 utils에서 사용 가능한 func를 살펴보면 Hellow밖에 호출되지 않는 것을 확인할 수 있다.
😂 그런데 여기서 문제가 하나 발생한다.
package main
import (
"fmt"
"github.com/project/helloworld/utils"
)
func main() {
fmt.Println("hello world")
utils.Hellow()
}
코드를 정상적으로 완료한 후 실행해보려고 하니
다음과 같이 go.mod
파일이 없다고 에러가 뜨는거다... 내가 본 강의에서는 안떴는데?? 그 문제점에 관해서는 구글에 검색하면 여러 해결 방법이 있었는데 내가 가장 추천하는 글은 해당 글이다.
글의 내용을 요약하면 go 언어가 이전에는 실행할 때 GOPAHT에 종속되어 실행이 되었는데 1.11버전부터는 의존성 관리, 패키지 관리 기능이 추가되었고 그 이후 1.16 버전부터는 GOPATH를 대신하여 go.mod 파일을 default 값으로 지정한 것이다. java로 치면 gradle이나 maven 설정 파일이 생긴 샘이다. 그렇기 때문에 해당 문제는 위 글을 통한 해결 방법으로 진행하는 것을 추천한다.
go mod init
명령어를 프로젝트 루트 경로에서 실행하면
다음과 같이 go.mod
파일이 생성된다. 이후 다시 실행을 해보면
정상적으로 다시 실행되는 것을 확인할 수 있다!
문제가 발생했을 때 가장 위에 뜨는 해결 방법을 사용하는 것이 빠르고 좋지만 왜 그렇게 해결해야하는지에 대해 설명해놓은 글을 참고하는게 더 중요하다는 것을 느꼈다!