Go에서는 애플리케이션을 패키지로 구성해요. 패키지는 같은 폴더에 있는 소스 파일들의 모음이에요. 한 폴더에 있는 모든 소스 파일은 파일 맨 위에 같은 패키지 이름을 써야 해요. 관례상 패키지 이름은 패키지가 위치한 폴더와 같게 지어요.
package greeting
Go는 다양한 표준 라이브러리 패키지를 제공하는데, import 키워드로 프로그램에서 사용할 수 있어요.
표준 라이브러리 패키지는 이름으로 가져와요.
package greeting
import "fmt"
가져온 패키지는 패키지 이름으로 접근해요:
world := "World"
fmt.Sprintf("Hello %s", world)
Go는 어떤 항목을 다른 패키지의 코드에서 호출할 수 있는지를 그 항목이 어떻게 선언되었는지로 판단해요. 함수, 타입, 변수, 상수, 구조체 필드를 외부에서 볼 수 있게 하려면, 이름이 대문자로 시작해야 해요. 이렇게 외부에 공개하는 것을 _내보내기_라고 해요.
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
Go에는 fmt(포맷 패키지)라는 내장 패키지가 있는데, 입력과 출력의 형식을 다루는 다양한 함수를 제공해요.
가장 많이 쓰는 함수는 Sprintf로, %s 같은 서식 동사를 사용해 값들을 문자열에 끼워 넣고 그 문자열을 반환해요.
import "fmt"
food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco
Go에서는 부동소수점 값을 Sprintf의 서식 동사로 편리하게 포맷할 수 있어요: %g(간결한 표현), %e(지수), %f(지수 없음).
세 동사 모두 필드의 너비와 소수점 위치를 조절할 수 있어요.
import "fmt"
number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32
사용할 수 있는 서식 동사의 전체 목록은 포맷 패키지 문서에서 확인할 수 있어요.
fmt에는 문자열을 다루는 다른 함수들도 있어요. 예를 들어 Println은 받은 인자들을 콘솔에 그대로 출력하고, Printf는 Sprintf와 같은 방식으로 입력을 포맷한 뒤 출력해요.
옛날에 창문에 쇠창살이 달린 이상한 집에 사는 별난 프로그래머가 있었어요. 어느 날 온라인 구인 게시판에서 파티 로봇을 만드는 일자리를 받아들였어요. 그 로봇은 사람들을 맞이하고 자리로 안내해야 했어요. 첫 번째 버전은 몹시 기술적이어서 프로그래머의 인간적 교류 부족을 그대로 드러냈어요. 그중 일부는 다음 버전에도 그대로 들어갔어요.
주어진 이름으로 환영 메시지를 반환하는 Welcome 함수를 구현해요:
Welcome("Christiane")
// => Welcome to my party, Christiane!
주어진 이름과 나이로 생일 메시지를 반환하는 HappyBirthday 함수를 구현해요.
안타깝게도 프로그래머는 좀 허세를 부리는 성격이라, 로봇은 모든 손님의 생일을 안다는 걸 보여줘야 해요.
HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!
길 안내를 하는 AssignTable 함수를 구현해요.
이 함수는 매개변수 5개를 받아요.
string)int)string)string)float64)정확한 결과 형식은 아래 예시에서 볼 수 있어요.
로봇은 테이블 번호를 세 자리 형식으로 알려줘요. 번호가 세 자리가 안 되면 앞에 0을 채워서 세 자리로 만들어요 (예: 3은 003이 돼요). 로봇은 테이블까지의 거리도 언급해요. 다행히 정밀도는 소수점 한 자리로 제한돼요.
AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.
Exercism에 가입하고 Go 트랙을 개념 34개연습 문제 165개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.