상세 컨텐츠

본문 제목

Go - 기본적인 데이터 타입과 선언 (2)

Development/Go

by thisisnew 2022. 11. 2. 16:28

본문

반응형

Go에서 변수를 선언하는 방법은 다양합니다.

 

1. var 키워드 사용

 

package main

func main() {
	var x string = "test"
	var y int = 200
}

값을 통해 타입이 예상 가능하다면, 등호(=) 왼쪽의 타입 선언은 생략해도 됩니다.

package main

func main() {
	var x = "test"
	var y = 200
}

제로 값을 할당하고 싶으면 아래와 같이 선언하면 됩니다.

package main

func main() {
	var x string
	var y int
}

제로 값에 대한 설명은 아래 포스팅에 나와있습니다.

https://thisisnew-storage.tistory.com/50

 

Go - 기본적인 데이터 타입과 선언 (1)

Go에는 기본적인 타입이 있습니다. 불리언(bool) 숫자 문자열 Go는 선언되었지만 값이 할당되지 않은 변수들에 제로 값(zero value)을 할당합니다. 1. 불리언 bool 타입의 변수는 true, false 중에 하나의

thisisnew-storage.tistory.com

이게 var를 이용한 기본적인 선언 방식들이고요.

여기서 다음과 같이 변형된 형태로도 선언할 수 있습니다.

package main

func main() {
	var a, b int = 1, 2
	var c,d = "test", 100
	var e, f string = "hello", "world"
	var (
		g string
		h = 4
		i int = 5
		j,k = "good", 3.0
		l  = "life"
	)
	
	var m,n float64
}

2. := 연산자 사용

 

:= 연산자를 사용해서 변수를 선언할 수도 있습니다.

package main

func main() {
	x := "test"
	y := 200

	a, b := 1, 2
	c, d := "hello", 100
	e, f := 3.45,"world"
}

:= 연사자를 사용하여 변수를 두 개 이상 선언할 경우에는 특이한 점이 하나 있습니다.

바로 새로 선언하는 변수가 하나라도 있으면, 나머지 변수들은 기존에 값이 있더라도 값이 할당이 된다는 것입니다.

다음 예시를 보시죠.

package main

import "fmt"

func main() {
	a := "test"
	b := 200

	a, b, c := "hello", 400, "world"

	fmt.Println("a:", a, "b:", b, "c:", c)
}
a: hello b: 400 c: world

단, 기존 변수들의 타입은 그대로 유지되어야 합니다.

그렇지 않을 경우엔 컴파일 에러가 발생하게 됩니다.

package main

import "fmt"

func main() {
	a := "test"
	b := 200

	a, b, c := "hello", 400, "world"

	fmt.Println("a:", a, "b:", b, "c:", c)

	a, b, c, d := 1, 2, 3, 4

	fmt.Println("a:", a, "b:", b, "c:", c)
}
.\example.go:13:13: cannot use 1 (type untyped int) as type string in assignment
.\example.go:13:13: cannot use 3 (type untyped int) as type string in assignment

3. const 사용

 

const를 사용하면 상수를 선언할 수 있습니다.

상수는 변하지 않는 값을 의미합니다.

https://ko.wikipedia.org/wiki/%EC%83%81%EC%88%98

 

상수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 상수(常數, constant)란 수식에서 변하지 않는 값을 뜻한다. 이것은 변하는 값 변수와 반대이다. 상수란 변하지 않고, 항상 일정한 값을 갖는 수를 말한다. 예를 들

ko.wikipedia.org

package main

import "fmt"

const a int = 10

const (
	b = "hello"
	c = "world"
)

func main() {
	const d = 4.5

	fmt.Println("a:", a, "b:", b, "c:", c, "d:", d)
}

상수이기 때문에, 새로운 값을 재할당 할 경우 컴파일 에러가 발생합니다.

package main

import "fmt"

const a int = 10

const (
	b = "hello"
	c = "world"
)

func main() {
	const d = 4.5

	a = 1
	b = "good"

	fmt.Println("a:", a, "b:", b, "c:", c, "d:", d)
}
.\example.go:15:4: cannot assign to a (declared const)
.\example.go:16:4: cannot assign to b (declared const)

4. 사용하지 않는 변수

 

Go에서 선언된 지역 변수들은 반드시 사용되어야 합니다.

사용하지 않는 지역 변수가 존재할 경우 컴파일 에러가 발생합니다.

 

package main

import "fmt"

const a = "global"

func main() {
	var b = "local"
	var c = "local too"
	fmt.Println("b:", b)
}
.\example.go:9:6: c declared but not used

5. 변수와 상수 명명

5-1. Camel case

Go에서의 변수 선언은 기본적으로 카멜 케이스(Camel case)를 따릅니다.

ex) helloWorld, loremIpsum

변수 선언 시 숫자, 밑줄, 문자 전부 허용되는데요.

다만 Go에서는 유의해야 할 점이 있습니다.

바로 상수의 선언이 다른 언어들과 조금 다르기 때문이죠.

 

많은 언어에서 상수를 선언할 때, 대문자와 스네이크 케이스를 이용합니다.(Upper snake case)

ex) HELLO_WORLD, LOREM_IPSUM

 

하지만 Go에서는 첫 번째 문자의 대소문자 여부로 접근 가능성을 따지기 때문에 이렇게 쓰지 않습니다.

동일하게 카멜 케이스로 이름을 붙여주시면 되겠습니다.

접근 제한 여부에 따라 첫 글자의 대소문자가 결정되고요.

 

5-2. 범위에 따른 변화하는 변수의 이름

변수의 범위가 작을수록 변수의 이름을 짧게 사용합니다.

package main

func main() {

	exMap := map[string]int{"a": 1, "b": 2}

	for k, v := range exMap {
		// k:key,  v: value
	}

	exSlice := []int{1, 2, 3, 4, 5}

	for i, v := range exSlice {
		// i: index, v: value
	}
}

변수의 이름이 짧아지면 장점과 단점이 명확해지는데요.

장점은 코드가 간결해지는 것이고, 단점은 변수의 추적이 어려워지는 것입니다.

만약 변수의 추적이 어려워지는 상황이라면, 그것은 해당 블록이 너무 많은 일을 하기 때문입니다.

반응형

'Development > Go' 카테고리의 다른 글

Go - 복합 타입 (1)  (0) 2022.11.03
Go - 기본적인 데이터 타입과 선언 (1)  (0) 2022.11.01
zlib을 이용한 데이터 압축  (0) 2022.10.09
Go를 이용하여 가볍게 알아보는 Base64  (0) 2022.06.10

관련글 더보기

댓글 영역