[golang] if 예제

go lang 2017. 8. 29. 20:32



go 언어는 다음 언어의 if와 다르게 if 표현식에 ( )를 사용하지 않는다. 



package main

import "fmt"


func main() {

  i := 1

  j := 2

  if i < 0 && j < 2 {

    fmt.Println("-")

  } else {

    fmt.Println("+")

  }

}


특이할 점은 if 문에 할당이 가능하다. 

package main
import "fmt"

func main() {
  if i := 0 ; i < 2 {
    fmt.Println("-")
  } else {
    fmt.Println("+")
  }
}


게다가 if 문 안에서 할당된 변수는 if / else 문에서 사용할 수 있다. 


func main() {

  if i := 0 ; i < 2 {

    fmt.Println(i)

  } else {

    fmt.Println(i)

  }

}





Posted by '김용환'
,



go 언어의 for 문은 다음의 예제와 비슷하다. 



for 문의 표현식은 기존처럼 조건문과 종료 조건을 사용할 수 있다. 



func main() {

  for i := 1; i < 10; i++ {

    println(i)

  }

}




결과는 다음과 같다. 


1

2

3

4

5

6

7

8

9




for 문의 표현식에 종료 조건을 사용할 수 있다.



package main

import "fmt"


func main() {

  i := 1

  for i < 10 {

    fmt.Println(i)

    i++

  }

}




결과는 다음과 같다.

1
2
3
4
5
6
7
8
9





또한 계산 expression은 사용할 수 없다. 다음 for문은 syntax error: i++ used as value 에러가 발생한다. 




func main() {

  i := 1

  for i < 10 {

    fmt.Println(i++)

  }

}




func main() {

  i := 1

  for i++ < 10 {

    fmt.Println(i)

  }

}







무한 루프가 되려면 for 조건을 사용하지 않는다.


func main() {


  for { }


}




range를 지원한다.


func main() {

  numbers := []int {10, 9, 8}

  for i, number := range numbers {

      println(i, number)

  }

}



이전 예제의 []int는 int 타입을 갖는 엘리먼트의 슬라이스(slice)이다. 




그러나 다음은 동작하지 않는다. 


  for i := range [1..10] {

      println(i)

  }



for문 안에 continue, break, goto를 사용할 수 있다. 



go 언어에서는 while은 지원하지 않는다. 





Posted by '김용환'
,


타입을 확인하는 방법은 reflect 패키지를 임포트한 후 TypeOf 메소드를 사용한다. 




예제는 다음과 같다. 


package main

import "fmt"

import "reflect"


func main() {


  var x, y = 1, "2"

  fmt.Println(x, y)

  fmt.Println(reflect.TypeOf(x))

  fmt.Println(reflect.TypeOf(y))

  fmt.Println()


  m := 1.2

  fmt.Println(m)

  fmt.Println(reflect.TypeOf(m))

}



결과는 다음과 같다.

1 2
int
string

1.2
float64



Posted by '김용환'
,


go언어는 immutable을 지원하지 않는다. 


string의 경우는 새로운 char[]을 생성해서 매번 새로운 문자열을 리턴하도록 한다. 


따라서 var만 있지 val은 없다. 



다음은 예제이다. 

package main

import "fmt"


func main() {

   var a = 1

   fmt.Println(a)

   a = 2

   fmt.Println(a)


   b := 10

   fmt.Println(b)

   b = 20

   fmt.Println(b)


   c := "aaaa"

   fmt.Println(c)

   c = "bbbb"

   fmt.Println(c)

}



결과이다.


1

2

10

20

aaaa

bbbb



go 언어에서 문자열에 대해서 변수 할당을 하지 못하게 하려면 상수 타입인 const를 사용한다. 


func main() {

  const x = "1"

  x = "2"

}





Posted by '김용환'
,


go 언어에서 함수 리턴 타입을 적을 때 ()을 사용할 때 튜플을 표현하지 않는다. 그저 묶음 표현일 뿐이다. 


스칼라에 익숙한 개발자라면 놓칠 수 있는 내용인데,.. 사실 go에는 튜플이 없다...



package main

import "fmt"


func main() {

   fmt.Println(add(1,2))

   x, y := add(1,2)

   fmt.Println(x, y)


   fmt.Println(minus(2,1))

}


func add(x int, y int) (int, int) {

  return x + y, x - y

}



func minus(x int, y int) (int) {

  return x - y

}



결과는 다음과 같다. 


3 -1

3 -1

1



함수의 매개변수를 정의할 때 (x int, y int)를 (x, y int)로 바꿔 사용할 수도 있다. 




func add(x, y int) (int, int) {

  return x + y, x - y

}



func minus(x, y int) (int) {

  return x - y

}






함수의 리턴 타입을 정의할 때 변수명을 지정할 수 있다. 함수 내부에서 바인딩되게 하고 리턴할 때 값을 특별히 지정하지 않아도 된다. 


package main
import "fmt"

func main() {
   fmt.Println(split(1))
}

func split(x int) (y, z int) {
  y = x + 2
  z = x + 10
  return
}


결과는 다음과 같다.

3 11


Posted by '김용환'
,


go 언어에는 멀티라인을 제공한다. 


한번에 `(backslash)를 사용할 수 있고 문자열 concatenation을 사용할 수도 있다. 



코드는 다음과 같다. 


  multilineLiteral1 := `aa

  ㅁㅁㅁㅁ

  `


  fmt.Println(multilineLiteral1)



결과는 다음과 같다.


aa

  ㅁㅁㅁㅁ







double quote로도 수행할 수 있다. 



  multilineLiteral2 := "aa  \n" +

  "ㅁㅁㅁ"


  fmt.Println(multilineLiteral2)


결과는 다음과 같다. 


aa

ㅁㅁㅁ




하지만 간단하지만 go에서는 다음 코드를 지원하지 않는다.  자바/스칼라 개발자에게는 의아할 수 있다..



multilineLiteral3 := "s \\n

  aaa"




multilineLiteral4 := "s \\n"

+  "aaa"

'go lang' 카테고리의 다른 글

[golang] go 언어는 not immutable 언어이다. (string 제외)  (0) 2017.08.29
[golang] 함수 리턴 타입에 괄호 사용하는 예제  (0) 2017.08.29
[golang] Go 공부 시작 링크  (0) 2017.08.29
go 1.5 발표  (0) 2015.06.03
godeps 예제  (0) 2015.04.02
Posted by '김용환'
,


go를 공부할 때, 도움되는 싸이트이다.






go 슬라이드 자료 

https://www.slideshare.net/songaal/lets-go-45867246

Let's Go (golang) from Song Sang




go 첫 시작

https://go-tour-kr.appspot.com/#1


이재홍님의 한글 책

http://pyrasis.com/private/2015/06/01/publish-go-for-the-really-impatient-book


예제로 배우는 go

http://golang.site/go/article/1-Go-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4-%EC%86%8C%EA%B0%9C



go by example

https://gobyexample.com/


디펜던스 관리 - godep

https://github.com/tools/godep


패키지 목록

https://golang.org/pkg/


문서

https://golang.org/doc/

'go lang' 카테고리의 다른 글

[golang] 함수 리턴 타입에 괄호 사용하는 예제  (0) 2017.08.29
[go] 멀티라인 (다중 라인)  (0) 2017.08.29
go 1.5 발표  (0) 2015.06.03
godeps 예제  (0) 2015.04.02
[go lang] command option 받기  (0) 2015.03.28
Posted by '김용환'
,