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