Go 자료형 해석

web comdori·2021년 3월 16일
0

write-in-go

목록 보기
3/4

go는 정적 자료형을 지원하는 언어여서 변수의 자료형을 선언해주고, 해당 변수에 맞는 형태의 값을 담는 방법을 이용함.

Go의 변수 해석 방법

c, c++과는 순서가 다름. c 언어에서는 변수를 해석할 때, 연산자 우선순위에 따라 해석했으나, go에서는 그대로 읽으면 됨.

c언어 : 변수이름부터 시작하여 우선순위가 높은 것 부터 해석

  • 우선순위 : 뒤에 있는 것 먼저, 가까운 것 먼저
int x1; // x1 is int (x부터 해석 후, int 해석)
int *x2; // x2 is pointer to int (x와 가까운 *부터 해석)
int x3[5]; // x3 is 5 array of int (x 뒤에 [5]부터 해석)
int *x4[5]; // x4 is 5 array of pointer to int
int (*x5)[5]; // x5 is pointer to 5 array of int

go : 영어 순대로 해석

var x1 int // variable x1 is int
var x2 *int // variable x2 is pointer to int
var x3 [5]int // variable x3 is 5 array of int
var x4 [5]*int // variable x4 is 5 array of pointer to int
var x5 *[5]int // variable x5 is pointer to 5 araray of int

위의 내용에 값을 대입하여 출력해보자.

package main

import "fmt"

func main() {
	var x1 int     // variable x is int
	var x2 *int    // variable x is pointer to int
	var x3 [5]int  // variable x is 5 array of int
	var x4 [5]*int // variable x is 5 array of pointer to int
	var x5 *[5]int // variable x is pointer to 5 araray of int

	x1 = 1
	x2 = &x1
	x3 = [5]int{1, 2, 3, 4, 5}
	x4 = [5]*int{&x3[0], &x3[1], &x3[2], &x3[3], &x3[4]}
	x5 = &x3

	fmt.Println("x1 : ", x1)
	fmt.Println("x2 : ", x2, " / *x2 : ", *x2)
	fmt.Println("x3 : ", x3)
	fmt.Println("x4 : ", x4)
	fmt.Println(
		"	*x4[0] : ", *x4[0],
		" / *x4[1] : ", *x4[1],
		" / *x4[2] : ", *x4[2],
		" / *x4[3] : ", *x4[3],
		" / *x4[4] : ", *x4[4])
	fmt.Println("x5 : ", x5, " / *x5 : ", *x5)
}

위와 같이 코드를 작성하고, 코드를 실행하면 아래와 같은 결과를 얻는다.

x1 :  1
x2 :  0xc000014098  / *x2 :  1
x3 :  [1 2 3 4 5]
x4 :  [0xc000016180 0xc000016188 0xc000016190 0xc000016198 0xc0000161a0]
        *x4[0] :  1  / *x4[1] :  2  / *x4[2] :  3  / *x4[3] :  4  / *x4[4] :  5
x5 :  &[1 2 3 4 5]  / *x5 [1 2 3 4 5]

함수 해석 방법

c언어 : 함수명을 중심으로, 연산자 우선순위에 따라 해석
- ()는 function (parameters) returning으로 해석

void f1(void); // f1 is function (no parameters) returning void
void f2(int, int); // f2 is function (int, int) returning void
int f3(); // f3 is function (no params) returning int
int *f4(); // f4 is function (no params) returning pointer to int
int (*f5())[5]; // f5 is function (no params) returning pointer to 5 array of int

go 언어 : 영어순대로 해석

func f1() // func f1 is function returning nothing
func f2(int, int) // func f2 is function (int, int) returning nothing
func f3() int // func f3 is function (no params) returning int
func f4() *int // func f4 is function(no params) returning pointer to int
func f5() *[5]int // func f5 is function (no params) returning pointer to 5 array of int

다음으로는 자료형 추론에 관해 학습하여 정리할 예정이다.

참고도서 : Discovery Go

profile
(wanna be a) Full-Stack Engineer

0개의 댓글