본문 바로가기

go 학습

go 기초 학습2 (함수, for, if, switch)

 

1.return 생략

 

func lenandvalue(word string) (len_s int,upper_s string) {
    len_s = len(word)
    upper_s = strings.ToUpper(word)
    return
}
func main() {
    len_s,upper_s := lenandvalue("logcat")  
    fmt.Println(len_s , " " , upper_s)
}

위의 lenandvalue 함수에서는 return 뒤에 아무것도 없다.

하지만 실행시켜보면 

6   LOGCAT

이 잘 나온다.

 

함수 이름 부분에 return 값의 타입을 미리 적는 go 언어의 특징때문에 return 값까지 미리 적을 수 있는것 같다고 감히 추축해본다.

 

위에서 미리 변수를 선헌한 것이기 때문에 

len_s = len(word) 을

len_s := len(word) 로 작성하는 일이 없어야 한다.

 

2.defer

func lenandvalue(word string) (len_s int, upper_s string) {
    defer fmt.Println("func is over")
    len_s = len(word)
    upper_s = strings.ToUpper(word)
    return
}
 
결과
func is over
6   LOGCAT
 
defer이란 함수가 종료된 후 실행되는 명령이다.
 
그림을 열거나 파일을 여는 함수를 사용할때 같이쓰면 매우 편리하다
 
함수가 종료된 후 실행된다고 말했지만 사실 함수가 성공적으로 종료되면 defer부터 실행하고
그다음에 return값이 출력된다.
 
 
3.for
 
 
go에서는 반복문이 for 하나이다 for in 이나 다른 for 파생형들이 없다
 
 
func sp(words ...string) int {
    defer fmt.Println("func is over")

    for index, value := range words {
        fmt.Println(index, " ", value)
    }
    return 0

}
func main() {
    fmt.Println(sp("aa", "bb", "cc", "dd", "ee", "ff"))
}
 
실행결과
0   aa
1   bb
2   cc
3   dd
4   ee
5   ff
func is over
0
 
 
for을 쓰는 방법에는 c나 java처럼
 
for i := 0 ; i <= k ; i++ 
로 쓸 수도 있지만 
 
range를 사용하는 것이 편리하고 많이 사용될 것이다.
 
range는 오직 for에서만 쓸수 있는 함수이고 
 
인덱스 와 값   두가지를 리턴한다
 
 
 

4.if, else

 

func test_d(val int) string {
    if val%2 == 1 {
        return "obb number"
    } else {
        return "even number"
    }
}
func main() {
    fmt.Println("13 is ", test_d(13))
}
 
결과
13 is  obb number
 
파이썬 처럼 소괄호 없이 바로 조건문을 작성한다.
 
처음 알았는데 odd number이 홀수라는 뜻이고 even number가 짝수라는 뜻이라고 한다.
 
if ans := ""; val%2 == 1 {
        ans = "odd number"
        return ans
    } else {
        ans = "even number"
        return ans
}

go에서는 이처럼 if 조건줄에서 변수를 생성할 수 있다. 

 

이 변수는 if 안에서만 사용 가능하다.

 

그냥 미리 변수 하나를 생성하지 않고 이렇게 사용하는 이유는

 

ans라는 변수가 무엇을 위한 변수인지 한눈에 보여줄 수 있기 때문이다.

 

 

5.switch

 

우리가 쓰던대로 쓰면 된다. 

알던거랑 크게 다를거 없다.

 

func test_d(val int) string {

    switch {
    case val == 0:
        return "0"
    case val%2 == 1:
        return "odd number"
    case val%2 == 0:
        return "even number"
    }
    return ""
}
func main() {
    fmt.Println("13 is ", test_d(13))
}
 
결과
13 is  odd number