go lang tips

package import

golang에서는 package의 네임을 결정 할때 다른언어와는 다른점이 있다. 예를들어 다음과 같은 코드가 있다고 하자.

  • main.go

    package main 
    import (
    "fmt"
    "github.com/bluemir/project/core"
    )
    func main(){
    fmt.Printf("hello world")
    core.Ready("development")
    }
    
  • github.com/bluemir/project/core

    package project
    import "fmt"
    func Ready(line string){
    fmt.Printf(line)
    }
    

이코드는 동작하지 않는다. 이유는 두번 째로 import한 package의 이름이 core가 아니기 때문이다. package의 이름은 default로 되어 있는 경우 내부의 package 선언에 따른다. 처음 go를 접한사람은 패키지의 기본 이름이 패키지 경로의 마지막으로 지정되는것 처럼 느껴지기 때문에 당혹스러울 것이다. 하지만 그것은 네이밍 컨벤션에 불과할뿐 실제 금지되는건 아니다. 그래서 두번째 package의 default name은 core가 아니라 project가 된다. 따라서 위 코드는 다음과 같아야 동작하는 코드가 된다.

package main 

import (
	"fmt"
	"github.com/bluemir/project/core"
)

func main(){
	fmt.Printf("hello world")
	project.Ready("development")
}