Go 1. 기본 문법

jiffydev·2020년 12월 29일
0

컴파일이 필요하면 반드시 main.go가 있어야 함
반대로 컴파일이 필요 없다면 main.go는 없어도 무관

imports

코드 본문에 패키지를 사용하면 자동으로 import에 들어감.
npm, pypi처럼 통합된 저장소가 없어서 url을 통해 외부 모듈을 다운받음
다운받은 소스는 src 폴더에 저장되어, import 할 때는 그 경로를 입력

변수 & 타입

변수는 const/var로 나눌 수 있음
const 값은 변경할 수 없으므로 구분해서 써야함

const name1 string = "name1"
var name2 string = "name2"

그런데 매번 const/var 와 타입을 써 주는것은 귀찮으므로
함수 안에서 변수를 초기화 할 때는

func main () {
    name1 := "name1"
    name1 = "name2"
}

으로 설정하면 알아서 타입을 지정해준다.
다만 이미 선언된 변수의 값을 변경할 때는 그냥 변수 = 값만 해도 된다.

함수

함수를 작성할 때도 타입은 반드시 설정해야 하는데, 인자의 타입과 리턴 타입을 모두 설정해야 한다.

func multiply(a, b int) int {
	return a * b
}

인자가 2개 이상이고 모두 같은 타입일 때는 끝에 한 번만 써도 된다.
리턴 타입은 인자 다음에 써 주는데 go의 특징으로는 리턴값이 여러개일 수 있다.
따라서 리턴이 여러개일 경우, 리턴 타입도 마찬가지로 (int, string)과 같이 여러개를 지정해줘야 하며, 리턴 값의 순서도 이에 맞춰 작성해야 한다.

func lenAndUpper(name string) (int, string) {
	return len(name), strings.ToUpper(name)
}

인자의 개수가 여러개인데 몇 개가 들어올지 모른다면 다음과 같이 인자로 ...을 주면 된다.

func repeatMe(words ...string) {
	fmt.Println(words)
}

func main() {
	repeatMe("nico", "lynn", "dal", "marl", "flynn")
}

>> ["nico" "lynn" "dal" "marl" "flynn"]

go의 특이한 기능 중 하나인 defer는 함수가 끝난 다음에 실행될 내용을 정할 수 있는 기능.

func lenAndUpper(name string) (length int, uppercase string) {
	defer fmt.Println("Done")
	length = len(name)
	uppercase = strings.ToUpper(name)
	return
}

func main() {
	totalLength, upperName := lenAndUpper("nico")
	fmt.Println(totalLength, upperName)
}

>> Done
>> 4 NICO
profile
잘 & 열심히 살고싶은 개발자

0개의 댓글