2021. 11. 9. 18:52ㆍProgramming/JAVA, C++, Go, Rust
- 목차
1. 변수
1.1 변수 선언
var a int
var f float32 = 11.
a = 10
f = 12.0
사용되지 않는 변수는 error가 발생한다.
아래와 같이 선언만 하고 사용하는 코드가 작성되지 않는다면 error가 발생한다.
var i, j, k int = 1, 2, 3
:=로 변수의 선언과 할당을 동시에 수행 할 수도 있다.
val := 10
1.2. 상수
var 대신 const를 사용하여 변수를 선언하면 '상수'로서 선언된다.
C++의 const와 동일한 keyword를 사용한다. (Kotlin의 경우 val keyword)
const c int = 10
const s string = "Hi"
Go는 type deduction을 지원한다.
변수 명 뒤에 변수의 type을 지정하지 않고 바로 '값'을 할당 시, 할당되는 값을 통해 type을 '유추'(deduction)한다.
const c = 10
const s = "Hi"
여러 상수들을 '('로 묶어서 한번에 선언 할 수도 있다.
const (
visa = 'visa'
master = 'master'
)
상수값을 0부터 순차적으로 부여할 수도 있다.
const(
APPLE = iota // 0
GRAPE // 1
1.3. go data types
| bool | boolean type 이다. | true/false의 값을 갖는다 |
| string | | |
| int | 일반적인 integer type | |
| int8 | 8-bit integer | |
| int16 | | |
| int32 | | |
| int64 | | |
| float32 | | |
| float64 | | |
| complex64 | | |
| complex128 | | |
| byte | uint8과 동일 | |
| rune | int32와 동일 | Unicode에 사용 |
1.4. 문자열
back quote
raw string literal
` `로 둘러쌓인 경우
raw sring literal이며 raw string 그대로의 값을 갖는다.
\n이 안에 있을 시 NewLine으로 해석되지 않는다.
double quote
""인 경우
interpreted string literal
복수 라인에 걸쳐 쓸 수 없다.
escape 문자열들은 특별한 의미로 해석된다.
package main
import "fmt"
func main() {
rarw_string_literal := \'test1\n
test2\n
test3`
inter_string_literal := "test2\ntest2"
fmt.Println(raw_string_literal)
fmt.Println(inter_string_literal)
}
출력 결과
test1
test2
test3
test2
test2
1.5. type conversion
var i int = 100
var u uint = uint(i)
var f float32 = float32(i)
println(f, u)
:= 으로 할당하면, type까지 정함
str := "abc"
bytes := []byte(str)
str2 := string(bytes)
println(bytes, str2)
1.6 print
package main
import(
"fmt"
)
func main() {
st := User{"name", 10}
fmt.Println("a", 10, 10, "b") // a 10 10 b
fmt.Printf("%v\n", st) // {name, 10}
fmt.Printf("%#v\n", st) // main.User{Name:"name", Age:"10"}
fmt.Printf("%+v\n", st) // {Name:name Age:10}
fmt.Printf("%T\n", st) // main.User
}
2. 연산자
사칙 연산자
c = (a + b)/5;
i++;
비교 연산자
a == b
a != c
a >= b
논리 연산자
A && B
A || !(C && B)
bit 연산자
c = (a & b) << 5
단항 연산자
a = 100
a *= 10
a >>= 2
a |= 1
2.2. 포인터 연산자
C++의 &, * 처럼 주소를 얻거나 반대로 dereference시 사용한다.
단, C처럼 pointer에 산술 연산을 적용할 수는 없다.
var k int = 10
var p = &k
println(*p) // 10
2.3. 조건문
if k == 1 {
println("1")
}
else 문
if k == 1 {
println("1"
} else if k == 2 {
println("2")
} else {
println("else")
}
if 문에서 조건식 이전에 할당문을 줄 수 있다.
해당 할당된 변수는 조건문 내에서만 유효한 scope를 갖는다.
if val := i*2; val < max {
...
}
switch
go의 switch에는 break가 없다. 기본 반영이다.
switch val {
case 1:
output = "1"
case 2:
output = "2"
case 3, 4:
output = "3 or 4"
default:
output = "default"
}
println(output)
switch expression 내에서도 할당이 가능하다.
switch val := input*2; val - 1 {
...
}
switch 뒤에 expression이 없을 수 있다.
이 경우 if else 대신 사용하기 좋다.
switch
case val == 1:
...
case val == 2:
...
type을 switch expression 내에서 사용 가능하다.
switch v.(type) {
case int:
println("int")
case bool:
println("bool")
}
fallthrough
go의 switch 문법에 break가 기본 적용되기에, fallthrough을 하려면 (타 언어와 반대로) fallthrough keyword를 사용해야 한다.
switch val {
case 1:
printlnk("1")
fallthrough
case 2:
print("2")
}
2.4. for 문
for 문 내에서는 var로 변수를 초기화 할 수 없다.
대신 :=를 사용한다.
for i := 0; i < 10; i++ {
val += 1
}
n := 10
for n > 0 {
n -= 1
}
infinite loop
for {
...
}
for range
names := []string{"a", "b"}
for idx, name := range names {
println(name)
}
break, continue, goto
break의 사용
for {
if i > 10 {
break
}
}
continue의 사용
for {
if queue.isEmpty() {
// wait for 1 sec.
continue
}
}
continue의 사용
for {
if val == 1 {
// handle ...
continue
}
}
goto의 사용
if ERROR == job1() {
goto END;
}
...
END:
...
'Programming > JAVA, C++, Go, Rust' 카테고리의 다른 글
go 언어로 web server 만들기 1 (고 언어 웹 서버) (0) | 2021.12.30 |
---|---|
go generic (고 언어 제네릭) (0) | 2021.12.22 |
Go empty interface (0) | 2021.12.09 |
Golang slice, map, struct (0) | 2021.11.09 |
Golang introduction (0) | 2021.11.09 |