Blog

Go Tour-1

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
복사