'Go' 카테고리의 글 목록 :: IdeaFusion
반응형

For (반복문 for)


Go 언어는 반복문이 for 밖에 없습니다.

기본적인 for 반복문은 C와 Java 언어와 거의 유사합니다. 다른점은 소괄호 ( )가 필요하지 않다는 것입니다.

하지만 실행문을 위한 중괄호 { } 는 필요합니다.

package main

import "fmt"

func main() {
    sum := 0
    for i := 0; i < 20; i++ {
        sum += i
    }
    fmt.Println(sum)
}

출력 결과

190

C와 Java에서 처럼 전.후 처리를 제외하고 조건문만 표현할 수도 있습니다.

package main

import "fmt"

func main() {
    sum := 1
    for sum < 1000 {
        sum += sum
    }
    fmt.Println(sum)
}

출력 결과

1024


Go에서 "While" 사용하기


이전의 예제에서 처럼 조건문만 표시하면 C언어에서 while 을 사용하듯 for 를 사용할 수 있습니다.

package main

import "fmt"

func main() {
    sum := 1
    for sum < 1000 {
        sum += sum
    }
    fmt.Println(sum)
}

출력 결과

1024


무한 루프


for에서 조건문을 생략하면 무한 루프를 간단하게 표현할 수 있습니다.

package main

func main() {
    for {
    }
}


Go언어의 For (반복문 for)를 학습하였습니다.

반응형
반응형

상수 (Constants)


상수는 const 키워드와 함께 변수처럼 선언합니다.

상수는 문자(character), 문자열(string), 부울(boolean), 숫자 타입 중의 하나가 될 수 있습니다.

package main

import "fmt"

const Pi = 3.14

func main() {
    const World = "안녕"
    fmt.Println("Hello", World)
    fmt.Println("Happy", Pi, "Day")

    const Truth = true
    fmt.Println("Go rules?", Truth)
}

출력 결과

Hello 안녕
Happy 3.14 Day
Go rules? true
해당 소스는 main 함수 외부, 내부에서 상수에 접근하여 출력합니다.
한번 정의된 상수는 재정의 할 수 없습니다(cannot assign)
Go는 여러가지 자료형을 지원하는데 https://golang.org/pkg/builtin/ 링크에서 확인하실수 있습니다.

숫자형 상수 (Numeric Constants)

숫자형 상수는 정밀한 값(values) 을 표현할 수 있습니다.

타입을 지정하지 않은 상수는 문맥(context)에 따라 타입을 가지게 됩니다.

코드를 통해 needInt(Big) 는 어떤 결과를 출력할지 실험해보세요.

package main

import "fmt"

const (
    Big   = 1 << 100
    Small = Big >> 99
)

func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
    return x * 0.1
}

func main() {
    fmt.Println(needInt(Small))
    fmt.Println(needFloat(Small))
    fmt.Println(needFloat(Big))
}

출력 결과

21
0.2
1.2676506002282295e+29

line 6 : Big 상수는 1의 값을 좌측 시프트 연산으로 100번 이동하였습니다.

line 7 : Small 상수는 Big 상수의 값을 우측 시프트 연산으로 99번 이동하였습니다.

Big 상수는 1 * (2^100) 의 값이며, Small 상수는 Big상수 / (2^99) 의 값이 되겠습니다.

여기까지는 출력에 문제가 없어보입니다. 예제에서 제시한 needInt(Big)을 해보겠습니다.

package main

import "fmt"

const (
    Big   = 1 << 100
    Small = Big >> 99
)

func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
    return x * 0.1
}

func main() {
    fmt.Println(needInt(Small))
    fmt.Println(needFloat(Small))
    fmt.Println(needFloat(Big))
    fmt.Println(needInt(Big)) // 추가
}

출력 결과

main.go:19:21: constant 1267650600228229401496703205376 overflows int

line 19에서 에러가 발생했네요. Big을 int형으로 출력하고싶었지만 오버플로우가 발생되었습니다.

Big의 시프트연산은 1에서 100비트를 이동해버려서 int의 32비트를 한참 초과하였습니다.

Big을 출력하려면 제약조건 내에서의 값 조정이 필요해보입니다.


Go언어의 상수 (Constants)를 학습하였습니다.

반응형
반응형

이 내용은 https://go-tour-kr.appspot.com/ 를 참고합니다.


이 내용은 Windows 환경에서 Go를 사용하며 IDE는 Visual Studio Code 입니다.


변수 (Variables)


변수를 선언을 위해 var 을 사용합니다.

함수의 매개변수처럼 타입은 문장 끝에 명시합니다.

package main

import "fmt"

var x, y, z int
var c, python, java bool

func main() {
    fmt.Println(x, y, z, c, python, java)
}

변수 x, y, z를 int형 타입으로 선언하였습니다.

변수 c, python, java를 bool형 타입으로 선언하였습니다.


변수의 초기화


변수 선언과 함께 변수 각각을 초기화를 할 수 있습니다.

초기화를 하는 경우 타입(type)을 생략할 수 있습니다. 변수는 초기화 하고자 하는 값에 따라 타입이 결정됩니다.

package main

import "fmt"

var x, y, z int = 1, 2, 3
var c, python, java = true, false, "no!"

func main() {
    fmt.Println(x, y, z, c, python, java)
}

변수 x, y, z를 int형 타입으로 선언과 동시에 x = 1, y = 2, z = 3 값을 입력하였습니다.

변수 c, python, java의 타입을 지정하지는 않았지만 true(bool), false(bool), "no!"(string) 값에 따라 타입이 결정되었습니다.


변수의 짧은 선언


함수 내에서 := 을 사용하면 var 과 명시적인 타입(e.g. int, bool) 을 생략할 수 있습니다.

(그러나 함수 밖에서는 := 선언을 사용할 수 없습니다.)

package main

import "fmt"

func main() {
    var x, y, z int = 1, 2, 3
    c, python, java := true, false, "no!"

    fmt.Println(x, y, z, c, python, java)
}

변수 x, y, z를 int형 타입으로 선언과 동시에 x = 1, y = 2, z = 3 값을 입력하였습니다.

변수 c, python, java의 앞에 var 키워드를 사용하지 않고 :=로 짧은 선언을 하였습니다. 

var를 사용하고 :=를 쓸 경우 에러가 발생됩니다.


변수 (Variables)를 학습하였습니다.

반응형

+ Recent posts