본문 바로가기
Language/Go

Go - hello world 와 external package

by ocwokocw 2021. 11. 28.

참조: Get started with go - https://go.dev/doc/tutorial/getting-started

- 기본환경

Go 를 설치했다고 가정하고 글을 작성한다. 설치는 https://go.dev/doc/install 에서 진행한다. IDE 는 GoLand 를 이용하였다.

- Hello world

내가 작성한 코드가 다른 모듈에 포함된 package 들을 import 해야할 때, 내가 작성한 코드의 자체 모듈을 통해 의존성 관리를 한다. 자체 모듈은 go.mod 파일에서 정의하며 import 해야하는 package 들을 제공하는 모듈을 추적한다.
 
go.mod 파일을 생성하여 내 코드가 의존성을 추적할 수 있게 하려면 go mod init 명령어를 수행해야 하는데, 내 코드가 위치할 모듈 이름을 정해주어야 한다. 이때 모듈 이름은 단순한 단어 하나가 아니라 모듈의 path 이다.
 
보통 모듈 path는 github.com/mymodule 과 같은 식으로 코드가 유지되는 repository 위치를 지정한다. 만약 모듈을 배포하여 다른 모듈이 사용하게 하고 싶다면 모듈 path 는 Go tool 들이 다운로드할 수 있는 path 로 해야한다. 일단은 듀토리얼이니 example/test 와 같은 식으로 지정하도록 하겠다.
 
작업할 디렉토리에서 go mod init example/test 명령어를 수행하면 아래와 같이 출력된다.
 
go mod init example/test
go: creating new go.mod: module example/test
 
 
tutorial.go 파일을 만들고 아래 내용을 기입해보자.
 
package main

import "fmt"

func main() {
	fmt.Println("Hello, world")
}
  • 위의 코드에서 main package 를 선언했다. (package 는 함수들을 그룹화 하며 같은 디렉토리내의 모든 파일로 구성된다.)
  • text 를 포맷팅하고 console에 출력할 수 있는 fmt package 를 import 했다. 이 패키지는 Go 를 설치하면 내장되어있는 standard library 패키지이다.
  • console 에 메시지를 출력하기 위해 main 함수를 구현했는데, main 패키지를 실행하면 기본적으로 main 함수가 실행된다.
go run . 을 실행하면 Hello, world 가 출력되는것을 확인할 수 있다.
 
go run .
Hello, world

- 외부 package 호출

개발을 하다보면 다른 누군가가 구현한 기능이나 라이브러리를 사용해야할 때가 있다. 외부 모듈을 사용해서 다른 메시지를 출력하는 예제를 통해 외부 모듈을 사용하는법을 알아보자.
  • pkg.go.dev 에서 "quote" 패키지를 검색해보자.
  • 검색결과에서 rsc.io/quote 패키지를 클릭한다.
  • Documentation 에서 Index 아래를 보면 호출할 수 있는 함수 목록이 있다.
  • Page 최상단에는 package quote 가 rsc.io/quote 모듈에 포함되어있음을 알려준다.
만약 다른사람이 구현해놓은 package 들을 검색하고 싶다면 pkg.go.dev 사이트에서 검색하면 된다. 모듈들은 시간이 지남에 따라 새로운 버전이 출시되며, 새로운 버전을 사용하도록 갱신할 수 있다. rsc.io/quote 패키지를 import 하고 Go 함수를 호출해보자.
 
package main

import "fmt"

import "rsc.io/quote"

func main() {
    fmt.Println(quote.Go())
}
 
 
위의 코드를 타이핑하면 오류가 뜰것이다. go mod tidy 명령어를 수행하면 quote 모듈을 requirement 로 추가하고 go.mod 파일에 go.sum 파일도 추가한다. 아래는 변경된 go.mod 의 파일내용이다. require 가 추가되었다.
 
module example/test

go 1.17

require rsc.io/quote v1.5.2

require (
	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
	rsc.io/sampler v1.3.0 // indirect
)
 
 
go run . 을 수행하면 아래와 같이 출력메시지가 나온다.
 
go run .
Don't communicate by sharing memory, share memory by communicating.

'Language > Go' 카테고리의 다른 글

Go - test  (0) 2021.11.28
Go - multiple input 과 return  (0) 2021.11.28
Go - random 과 slice  (0) 2021.11.28
Go - Return 과 handle an error  (0) 2021.11.28
Go - called module 과 caller module  (0) 2021.11.28

댓글