일단 변수와 상수.
Golang에서 변수를 선언하는 방법은 다음과 같다.
var a int
var a, b, c int
var a, b, c int = 1, 2, 3 // 순차적으로 a = 1 , b = 2 , c = 3
var a = 1 // 할당되는 값의 타입 추론
a := 1
변수에 초기값을 설정해주지 않으면 각각 타입에 맞는 Zero Value가 할당된다.
Go 가 상수를 선언하는 방법도 다음과 같다.
const a int = 1
const s string = "Bit"
const a = 1
const s = "Bit" // 타입을 Go에서 자동적으로 추론
const (
A = iota // 0
B // 1
C // 2
)
"iota" 라는 identifier를 A에 할당하면 값들이 순차적으로 1씩 증가된 값을 부여받는다.
const를 선언하고 중괄호 안에 여러개 값을 할당 가능하다.
package main
func main() {
const (
a = "a"
b = "b"
c = "c"
d = iota
e
f
)
println(a,b,c,d,e,f)
}
// a b c 3 4 5
이렇게 실행하면 a b c 3 4 5 이라는 결과값을 얻게 된다.
Go에는 (다른 언어와 마찬가지로) 여러가지 타입이 있다.
bool 타입, string , int , int8 16 32 64, uint, uint8 16 32 64, float32, float64, complex64, complex128, byte ...
설명은 필요 없을거라 생각한다.
문자열을 다룰 때, 큰따옴표와 작은따옴표 모두 사용할 수 있다.
작은따옴표는 작은따옴표 사이에 있는 문장 모두를 그대로 RAW하게 표현하고, 큰따옴표는 escape 문자열을 해석하고, 복수열으로 사용할 수 없다. 복수열으로 사용하고 싶으면 +를 사용하게 된다. 아래 예시를 보자
package main
import "fmt"
func main() {
// 작은따옴표. 주석도 얄짤없음
jageun := `가\n
나\n // RAW하게 인식해버림
다 라`
// 큰따옴표
keun := "가\n나\n" +
"다 라"
fmt.Println(jageun)
fmt.Println()
fmt.Println(keun)
}
/* 출력 */
가\n
나\n // RAW하게 인식해버림
다 라
가
나
다 라
형변환도 물론 가능하다.
package main
func main() {
var i int = 305
var u uint = uint(i)
var f float32 = float32(i)
println(f, u)
u = "string" // 이런거 오류남
}
float형이 없고 무조건 float32, float64인가 봄.
형변환 명시적 지정 안해주면 오류난다. 그냥 무작정 넣을 수 없음.
산술 , 관계 , 논리 연산자 다 가능하다.
[ 사칙연산( + - * / % ) 되고, ++ , -- 가능하다. == , != , <= , >= 가능하다. && || ! 가능하다. ]
AND , OR, XOR 연산도 가능하고, 바이너리 쉬프트도 가능.
[ & | ^ << >> ]
할당연산자로 불리는 것도 다 가능하다
[ += -= *= %= <<= ]
포인터 연산자는 제공하지만, 포인터 연산은 제공하지 않는다.
q := 1
var p = &q
println(*p) // 가능
println(*(p+1)) // 불가능