컴파일러는 package 이름이 main인 것부터 찾아내기 때문에 package의 이름을 main 으로 설정해야 컴파일할 수 있다. (파일 이름 == 패키지 이름)
그리고 함수가 존재해야 실행 가능하다.
ex.
func main() {}
fmt -> formatting을 위한 패키지
함수를 export 하고 싶으면 함수명을 대문자로 시작하면 된다.
const (상수), var (변수)
const name string = "melon"
var age int = 23
// 축약 : 오로지 함수(func) 안에서만 가능하고 변수에만 적용 가능
name := "melon"
age := 23
리턴하는 값의 타입도 다음과 같이 지정해주어야 한다.
func multiply(a int, b int) int {
return a * b
}
매개변수 선언 시에 마지막 매개변수에만 타입을 지정해주면 앞에 있는 매개변수까지 지정한 타입으로 적용된다.
function multiply(a, b int) int {
return a * b
}
또한, 함수를 호출하여 반환된 값을 가져오고 싶을 때 다음과 같이 할 수 있다.
func lenAndUpper(name string) (int, string) {
return len(name), strings.ToUpper(name)
}
func main() {
totalLength, upperName := lenAndUpper("melon")
}
그러나 고 언어는 까다롭게도 무엇인가를 만들고 사용하지 않으면 에러를 발생시킨다.
다음과 같이 사용하면 에러는 해결된다.
func main() {
totalLength, upperName := lenAndUpper("melon")
}
fmt.Println(totalLength, upperName);
그리고 함수의 반환값 만큼 변수에 저장할 수 있는데, 두 가지의 반환값을 가진 함수에서 한가지 값만 가져오고 싶으면 다음과 같이 언더바 (_)를 활용하여 쓸 수 있다.
func main() {
totalLength, _ := lenAndUpper("melon")
fmt.Println(totalLength)
}
다음과 같이 함수에 여러 값을 넣고 함수를 실행하면 array 형태로 반환시켜준다.
func repeatMe(fruits ...string) {
fmt.Println(fruits)
}
func main() {
repeatMe("melon", "banana", "orange")
}
>>> [melon, banana, orange]
고언어에는 수많은 패키지들이 있다.
예를 들어, 자바스크립트의 toUpperCase() 라는 메소드를 사용하고 싶으면,
strings 패키지를 임포트하여 다음과 같이 쓸 수 있다.
strings.ToUpper(name)