새로운 언어를 배울때 가장 기본이라 할 수 있는
Hello World를 출력해보도록 하겠습니다.
package main
func main() {
println("Hello World")
}
main)을 지정합니다.Go는 패키지 내의 Entry Point인 main() 함수를 찾아 프로그램을 실행합니다.터미널에서
Go프로그램을 실행시켜보도록 하겠습니다.
hellog.go 파일의 main package에 main 함수를 실행합니다.
Go언어에서의 변수를 사용하는 여러가지 방법을 알아보도록 하겠습니다.
package main
import (
"fmt"
"reflect"
)
func main() {
var message string
message = "Hello, Go!"
fmt.Println(message, reflect.TypeOf(message))
var hi string = "Hi!"
fmt.Println(hi ,reflect.TypeOf(hi))
var who = "Who R U"
fmt.Println(who, reflect.TypeOf(who))
goodBye := "GoodBye"
fmt.Println(goodBye, reflect.TypeOf(goodBye))
}
Import (fmk, reflect)부분은 추후에 알아보도록 하겠습니다.변수를 할당하는 방법으로는,
var키워드를 사용하여 변수를 먼저 선언하고 후에 값을 할당하기, 선언과 할당을 함께하기, 자료형을 생략하고 선언과 할당을 함께하기, 그리고 마지막으로 가장 많이 쓰이는 단축 변수 선언까지 있습니다.타입이 명시되지 않은 경우에는 컴파일시 자동으로 타입을 추론합니다.
var를 사용하여 변수를 할당없이 선언만 할 때는 자료형을 생략할 수 없습니다. 단축 변수 선언 구문을 사용할 때에는:=를 사용함을 주의해야합니다.
전역 스코프에서 변수를 선언할 때 주의할 점은 단축 변수 선언 구문을 사영하면 문법에러가 발생하며 변수를 선언하고 따로 할당하는 것도 전역 스코프에서는 불가능합니다.
전역 스코프에서 변수를 선언하며 사용법을 익혀봅시다.
package main
import (
"fmt"
"reflect"
)
var message string
var hi string = "Hi"
var who = "Who R U"
/**
-> Error
goodBye := "GoodBye"
*/
func main() {
message = "Hello, Go!"
fmt.Println(message, reflect.TypeOf(message))
fmt.Println(hi, reflect.TypeOf(hi))
fmt.Println(who, reflect.TypeOf(who))
}
Go언어에서 여러개의 변수를 선언할 때는 아래와 같은 방법으로 선언할 수 있습니다.
package main
func main() {
message, hi, who, goodBye := "Hello, Go!", "Hi", "Who R U", "GoodBye"
}
변수를 여러개 선언하고 값을 할당할 때는 반드시 선언하는 변수와 할당하는 값의 개수가 같아야 하며 타입은 같지 않아도 괜찮습니다.
package main
import (
"fmt"
"reflect"
)
func main() {
golang, javascript := "Good", false
fmt.Println(golang, reflect.TypeOf(golang))
fmt.Println(javascript, reflect.TypeOf(javascript))
}
var를 사용하여 변수를 선언할 때는 아래와 같은 방법으로도 선언할 수 있습니다.
package main
var (
message string
hi string
who string
goodBye string
golang true
)
Go언어에서 변수를 재할당과 재선언을 하는 행위는 아래와 같이 다소 특이하게 동작합니다.
package main
import "fmt"
func main() {
message := "Hello, Go!"
message, javascript := "Awesome", false
/** -> Awesome, false */
fmt.Println(message, javascript)
}
/** Another file */
func main() {
message := "Hello, Go!"
/**
Error ->
message := "Awesome"
True ->
message = "Awesome"
*/
}
첫번째
main함수를 살펴보면 코드를 살펴보면,message라는 변수를 재선언하고 값이 바뀐 것을 확인할 수 있습니다.하지만, 두번째
main함수를 살펴보면 에러가 발생한 것을 확인할 수 있습니다.단축 변수 선언을 통해 여러개의 변수를 함께 선언할 때, 하나라도 새로운 변수가 있으면 이는 단축 변수 선언 문법을 사용하더라도 기존 변수에 대해서는 재할당으로 처리됩니다.
첫번째
main함수에서 에러가 발생하지 않은것은 이 같은 이유 때문입니다.
Go언어에서는 패키지, 타입과 똑같은 이름의 변수를 선언해도 에러가 발생하지 않습니다.
package main
import (
"fmt"
"reflect"
)
func main() {
string := 10
/** -> 10 int */
fmt.Println(string,reflect.TypeOf(string))
/**
Error ->
var message string = "Hello, Go!"
*/
}
var를 사용하여 변수string을 만들었고,message를string타입으로 할당하려고 하면Error를 뱉으니 주의하여야 합니다. ( 가급적 패키지명이나 타입으로는 이름을 짓지 맙시다.. )
제로 값은 변수를 선언만 하고 값을 할당하지 않은 상태에서의
Default Value를 의미하는데, 예를 들어Int타입같은 경우에는0이 제로 값입니다.
package main
import "fmt"
var (
myInt int
myFloat float64
myString string
myBool bool
)
func main() {
/** -> 0, 0, "", false */
fmt.Printf("%#v %#v %#v %#v", myInt, myFloat, myString, myBool)
}
상수는 변수와 비슷하지만 한 번 선언하고 값을 할당하면 값을 변경할 수 없습니다. 선언과 할당을 따로 할 수는 없으며
const키워드를 사용하여 상수를 선언할 수 있습니다.자료형 명시는 컴파일러가 알아서 추론해주기 때문에 선택적으로 해주면 됩니다. 또한 전역 스코프, 지역 스코프 상수 모두 컴파일 타임에 초기화 됩니다.
package main
import "fmt"
func main() {
const MAX_SIZE int = 10
/**
Error ->
MAX_SIZE = 20
*/
/** -> 10 */
fmt.Println(MAX_SIZE)
}
변수와 마찬가지로 상수도 여러개를 함께 선언할 수 있습니다.
package main
func main() {
const MAX_SIZE, LANG = 10, "Golang"
}
변수와 마찬가지로 다른 형태로도 여러개의 상수를 선언할 수 있습니다. 하지만, 이렇게 할 경우 할당까지 같이 해주어야 합니다.
package main
import "fmt"
const (
MAX_SIZE int = 10
LANG string = "Golang"
)
func main() {
/** -> 10, Golang */
fmt.Println(MAX_SIZE, LANG)
}
Go 언어 공부 GoGo~~! 엌ㅋㅋㅋㅋㅋㅋㅋ