티스토리 뷰

개발/GO

[Golang] Variables 변수 선언

피클s 2022. 3. 10. 19:26

이 글은 Variables in Go (Golang) - Welcome To Golang By Example의 글을 번역 및 재가공하여 작성한 글입니다.

 

 

목차

     

    1. 명명 규칙

    1. 변수명은 오직 문자 또는 _ 로 시작할 수 있습니다.
    2. 그다음으로는 모든 숫자와 문자, _ 를 사용할 수 있습니다.
    3. 대소문자를 구분합니다.
    4. Golang의 키워드는 사용할 수 없습니다.
    5. 길이 제한은 없습니다.

    2. 변수 선언

    2-1. 초기값이 없는 단일 변수 선언

    package main
    
    import "fmt"
    
    func main() {
        var number int
        var str string
        var flo float64
        var boolean bool
        fmt.Println(number, str, flo, boolean)
    }

    결과는 0, 빈문자, 0, false입니다.

    이것은 초기값이 없을 때 할당되는 값입니다.

    0  0 false

     

    2-2. 초기값이 있는 단일 변수 선언

    package main
    
    import "fmt"
    
    func main() {
        var number int = 341123
        fmt.Println(number)
    }
    341123

     

    2-3. 변수 선언 한 번에 하기

    package main
    
    import "fmt"
    
    func main() {
        var aaa, bbb int
        var ccc, ddd int = 1, 2
        fmt.Println(aaa, bbb, ccc, ddd)
    }
    0 0 1 2

     

    2-4. 변수 선언 한 번에 하기2

    package main
    
    import "fmt"
    
    func main() {
        var (
            aaa int
            bbb int    = 8
            ccc string = "a"
        )
    
        fmt.Println(aaa, bbb, ccc)
    }
    0 8 a

     

    2-5. 변수 타입 자동 추론

    변수 타입을 지정하지 않았을 때는 자동 추론됩니다.

    package main
    
    import "fmt"
    
    func main() {
    	var t = 123                  // int
    	var u = "circle"             // string
    	var v = 5.6                  // float64
    	var w = true                 // bool
    	var x = 'a'                  // rune
    	var y = 3 + 5i               // complex128
    	var z = sample{name: "test"} // main.Sample
    
    	fmt.Printf("타입: %T 값: %v\n", t, t)
    	fmt.Printf("타입: %T 값: %v\n", u, u)
    	fmt.Printf("타입: %T 값: %v\n", v, v)
    	fmt.Printf("타입: %T 값: %v\n", w, w)
    	fmt.Printf("타입: %T 값: %v\n", x, x)
    	fmt.Printf("타입: %T 값: %v\n", y, y)
    	fmt.Printf("타입: %T 값: %v\n", z, z)
    }
    
    type sample struct {
    	name string
    }
    타입: int 값: 123
    타입: string 값: circle
    타입: float64 값: 5.6
    타입: bool 값: true
    타입: int32 값: 97
    타입: complex128 값: (3+5i)
    타입: main.sample 값: {test}

     

    2-6. 변수 선언 키워드 생략

    := 연산자는 함수 내부에서만 사용할 수 있습니다.

    package main
    
    import "fmt"
    
    func main() {
    	num := 1
        str1, str2 := "a", "b"
    	fmt.Println(num, str1, str2)
    }
    1 a b

     

    2-7. 사용하지 않은 변수는 에러 발생

    package main
    
    func main() {
        var a = 1
    }
    a declared but not used

     

    2-8. 한번 선언한 변수는 다른 타입을 넣을 수 없다

    package main
    
    func main() {
        var aaa int = 1
        aaa = "atest"
    
        bbb := 1
        bbb = "btest"
    }
    ./prog.go:5:6: cannot use "atest" (type untyped string) as type int in assignment
    ./prog.go:8:6: cannot use "btest" (type untyped string) as type int in assignment

     

    2-9. 로컬 변수

    블록 또는 함수 내에 정의된 변수

    package main
    
    import "fmt"
    
    func main() {
        var aaa = "test"
        fmt.Println(aaa)
    
        if i := 0; i < 3 {
            fmt.Println(i)
        }
    
        fmt.Println(i) // i는 if문 안에서만 접근할 수 있다.
    }
    
    func testLocal() {
        fmt.Println(aaa) // aaa는 main함수 안에서만 접근할 수 있다.
    }
    ./prog.go:13:14: undefined: i
    ./prog.go:17:14: undefined: aaa

     

     

    2-10. 전역 변수

    • 파일의 맨 위에 선언된 경우 패키지 내에서 전역이 됩니다.
    • 소문자로 시작하는 경우 정의가 포함된 동일 패키지 내에서만 액세스 할 수 있습니다.
    • 다른 파일이라 하더라도 같은 패키지라면 액세스 할 수 있습니다.
    • 대문자로 시작하는 경우 다른 패키지 외부에서 액세스 할 수 있습니다.
    • 전역 변수는 프로그램이 종료될 때까지 사용할 수 있습니다.
    package main
    
    import "fmt"
    
    var aaa = "test"
    
    func main() {
        testGlobal()
    }
    
    func testGlobal() {
        fmt.Println(aaa)
    }
    test

     

    '개발 > GO' 카테고리의 다른 글

    [Golang] defer  (0) 2022.04.04
    [Golang] 전략(Strategy) 패턴  (0) 2022.04.01
    [Golang] 함수 정의  (0) 2022.03.31
    [Golang] 조건문과 반복문  (0) 2022.03.23
    [Golang] Constant 정수 선언  (0) 2022.03.13
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/10   »
    1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
    글 보관함