Go Tour
패키지
고랭(Go Lang)으로 작성된 프로그램은 모두 패키지로 구성되어있으며, 패키지명은 디렉토리 경로의 마지막껄 사용한다.
e.g) path/filepath 일 경우 패키지명은 filepath 이다.
패키지 임포트
•
패키지 임포트는 소괄호로 감거나, import 문장을 여러번 사용할 수 있다
import (
"fmt"
"math"
)
Go
복사
import "fmt"
import "math"
Go
복사
패키지 익스포트
•
패키지를 임포트하면 패키지 내에서 익스포트 한 메소드, 상수등에 접근할 수 있다.
•
변수명, 함수명의 첫글자가 대문자로 시작하면 외부에서 접근이 가능해진다.
- Foo (o)
- FOO (o)
- foo (x)
Plain Text
복사
함수
•
C, C++, Java와 다르게 매개변수를 오른쪽에 명시해준다.
◦
오른쪽에 명시하는 이유를 간단히 설명하자면, 코드를 왼쪽에서 오른쪽으로 자연스럽게 읽기 위해서라고 한다.
import "fmt"
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Println(add(1,2))
}
Go
복사
•
매개변수의 타입이 같을경우, 마지막 매개변수의 타입만 명시하고 나머지는 생략이 가능하다
func add (x, y int) int {
return x + y
}
Go
복사
•
함수내에 여러개의 결과를 반환할 수 있다
func swap(x, y String) (String, String) {
return y, x
}
Go
복사
•
반환값에 이름을 명시해둘 경우 변수처럼 사용이 가능하며, 반환값을 지정하진 return 문에 자동으로 처리된다
func division (sum int) (result int) {
result = sum / 2
return
}
Go
복사
변수
•
변수는 var 키워드를 사용한다
•
함수의 매개변수와 같이 변수명 뒤에 타입을 명시한다
•
값을 초기화 할 경우 초기화 한 값의 타입이 자동으로 결정된다
var x, y, z int
var python, java, node = true, false, true
Go
복사
•
함수 내에서 변수 선언을 간단하게 사용이 가능하다
func main () {
x, y, z := 1, 2, 3
}
Go
복사
•
상수는 const 키워드를 사용하며, (문자열, Bool, 숫자) 타입만 선언할 수 있다
•
임포트처럼 소괄호로 묶어서 사용할 수 있다
import "fmt"
const Pi = 3.14
const (
Big = 1 << 100
Small = Big >> 99
)
func main () {
fmt.Println(Pi)
}
Go
복사
반복문
•
Go에서는 반복문은 for 만 사용한다.
•
사용법은 C, Java 와 유사하며, 소괄호는 생략한다
import "fmt"
func main () {
sum := 0
for i := 1; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
Go
복사
•
조건부만 사용할 수 있다 ( While문 )
import "fmt"
func main () {
sum := 0
for sum < 100 {
sum += 5
}
fmt.Println(sum)
}
Go
복사
•
조건부도 생략하면 무한루프가 된다
import "fmt"
func main () {
for {
fmt.Println("으악! 무한루프다")
}
}
Go
복사
조건문
•
조건문은 C, Java 와 유사하게 사용이 가능하며, 반복문과 마찬가지로 소괄호는 생략한다
import "fmt"
func odd (num int) bool {
if num / 2 == 1 {
return true
} else {
return false
}
}
func main () {
fmt.Println(odd(3))
}
Go
복사
•
조건문 앞에 변수를 선언할 수 있으며, 여기서 선언된 변수는 if, else 문 내의 스코프에서만 유효하다
import "fmt"
func odd (num int) bool {
if b := num / 2; b == 1 {
return true
}
// Undefined: b
// fmt.Println(b)
return false
}
func main () {
fmt.Println(odd(3))
}
Go
복사
타입
기본 자료형은 아래와 같다
•
bool
•
string
•
int
◦
int, int8 int16 int32 int64
◦
uint uint8 uint16 uint32 uint64 uintptr
•
byte (uint8 alias)
•
rune (int32 alias)
•
float
◦
float32 float64
•
complex
◦
complex64 compl128
구조체
struct 키워드를 통해 구조체를 만들 수 있으며, type 선언으로 구조체의 이름을 지정할 수 있다
import "fmt"
type User struct {
name string
age int
}
func main () {
user := User{"서동명", 21}
fmt.Println(user.name)
}
Go
복사
포인터
•
포인터는 있지만, 포인트 연산은 불가능하다
•
구조체는 구조체 포인터로 접근이 가능하며, 실제 구조체에 직접적인 영향을 끼친다
import "fmt"
type User struct {
name string
age int
}
func main () {
user := User{"서동명", 21}
p := &user
p.name = "누군지 모르겠어"
fmt.Println(user.name)
fmt.Println(p.name)
}
Go
복사
•
구조체 리터럴
◦
{key: value} 형태로 값을 설정할 수 있다 (순서는 상관없다)
◦
& 키워드를 통해 구조체 리터럴 포인터를 생성할 수 있다
import "fmt"
type User struct {
name string
age int
}
func main () {
user := User{"서동명", 21}
user1 := User{name: "누굴까"}
user2 := &User{age: 21}
fmt.Println(user.name)
fmt.Println(user1.name)
fmt.Println(user)
fmt.Println(user1)
fmt.Println(user2)
}
Go
복사
new 함수
•
new(T) 는 모든 값이 0 (Zero Value) 로 할당된 타입의 포인터를 반환한다
◦
숫자 타입은 0, 참조 타입은 nill
import "fmt"
type User struct {
name string
age int
}
func main () {
user := new(User)
fmt.Println(user)
user.name = "서동명"
fmt.Println(user)
}
Go
복사