오늘은 Go의 Main Package에 대해 다뤄보도록 하겠습니다
이 글은 NomadCoders의 영상을 보고 정리한 글입니다.
우리가 원래 알고있던 언어들의 main의 역할은 시작점이라는 것입니다.
모든 언어가 그렇듯이 Go도 특별하지는 않습니다 main이 시작점이죠
C에서 헤더의 <stdio.h>를 사용하듯이 Go에서는 아래처럼 사용할 뿐입니다
Main
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello Wrold")
}
하지만 오픈소스를 만든다면 컴파일을 하지 않고 다른사람들과 같이 쓰기 때문에 main.go는 필요가 없겠죠?
main는 이렇듯 컴파일을 위해서 필요한 것입니다!
그리고 출력문을 작성하기 위해서는 fmt.Println("~"을 타이핑하는데 여기서 fmt(formatting)을 위한 package입니다
그리고 꼭꼭 fmt.다음의 시작은 대문자입니다.
왜 그럴까요? 먼저 leango라는 폴더 안에 something폴더 또 그안에 something.go라는 파일을 만듭니다
//something.go 파일
package something
import "fmt"
var K = 5
func SayHello() {
fmt.Println("Hello")
}
func sayBye() {
fmt.Println("Bye")
}
위 파일에서 다른 점은 S, s 대문자와 소문자입니다 그리고 다시 main으로 돌아가
package main
import (
"fmt"
"github.com/sleeg00/learngo/something"
)
func main() {
fmt.Println("Hello Wrold")
something.SayHello()
fmt.Println(something.K)
}
이렇게 사용합니다 여기서 something.SayHello()즉 앞에 대문자로 붙은 func만 작동하는 이유는 Go에서는 대문자가 아니라 소문자면 그 func는 Private처리 하기 때문입니다, 많은 언어에서 보이는 Private ,Public 같이 말이죠
그렇다면 앞에 대문자가 붙는 func는 Public, 소문자라면 Private다 라고 생각하면 되겠습니다.
그러면 또 궁금한 것이 생기죠 Java, C++에서는 다른 Class에 대하여 Private한 변수가 있다면 상속을 받아오거나 했었죠?
유츄해볼 수 있듯이 위에서 쓰인 var K 를 저렇게 가져다가 쓰면 됩니다. 소문자를 쓰면 당연히 Private이 되겠습니다.
변수
어떤 언어에서든 중요한 변수죠 알아봅시다
1. Const 주석에서 보이듯이 Go는 타입이 없는 상수는 타입을 지정해줘야 합니다 하지만 상수이기 때문에 값 변경을 불가하죠
package main
import "fmt"
func main() {
const name string = "sleeg" //타입이 없는 상수 하지만 Go는 알려줘야 합니다
// name = "Lynn" name의 값은 변할 수 없습니다 -> name = constant(상수)이기 때문이죠
// const name bool = "true"
fmt.Println(name)
}
2. var 사용법입니다 똑같은 타입지정까지 해줬지만 값을 변경할 수 있습니다
package main
import "fmt"
func main() {
var name string = "sleeg"
name ="lynn"
fmt.Print(name)
}
3. Go의 type 찾아주기 Go는 저렇게 축약형으로 변수를 선언하면 자동으로 Type을 찾아줍니다.. 정말 깔금한 코드가 되었죠?
package main
import "fmt"
func main() {
//var name string = "nico"
//name ="lynn"
name := "sleeg"
fmt.Print(name)
}
(참고할 사항은 전역변수로는 쓸 수 없습니다 func안에서만 사용 가능) ---> 그러면 전역변수로는 var등을 사용해야겠죠?
자 다음글에서는 func의 인자값 전달에 대해 그리고 If문에 대해 알아보겠습니다
궁금한 점이나 제가 틀린 것이 있다면 댓글 부탁드립니다!
'Go' 카테고리의 다른 글
[Go] Go루틴이란 무엇인가? (0) | 2023.02.16 |
---|---|
[Go] struct를 생성하고 error코드 작성하기 (0) | 2023.01.09 |
[Go] append와 가비지 컬렉터의 관계 & if, switch문 알아보기 (0) | 2023.01.09 |
[Go] $GOPATH/go.mod exists but should not 오류 (0) | 2023.01.09 |
[Go] Go의 특별한 인자값 전달 (0) | 2023.01.08 |