기본 콘텐츠로 건너뛰기

golang에서 namespace 범위

golang에서 namespace 범위는 package 단위로 처리된다. Package안의 go 파일이 많아도 다른 package에서 호출할 경우는 하나의 package로 호출하고 된다. 다른 패키지에서 호출을 할 때 왜 하나의 package단위가 namespace릴까? 패키지 단위로 build, install를 할 경우 하나의 패키지 단위로 .a  파일을 만든다. 실제 import 되어 처리 될 경우는 .a 파일이 전체를 불러오므로 하나의 패키지는 하나의 namespace 역할을 한다.

golang에서 interface{} 데이터 타입 사용하기...

golang에는 interface{} 데이터 타입이 있고 이 데이터 타입은 다른 데이터 타입을 값으로 받아서 처리가 가능하다. var ift interface{} var a int a = 33 ift = a fmt.Println(ift.(int)) 이렇체 처리시 실제 33 값이 출력된다. 실제 interface{} 타입에 들어간 literal들에 대한 데이터 타입과 데이터 값들을 처리하도록 interface{}내부적으로 제공하는 실제 기능이다. 이처럼 interface{} 타입은  타입내부에 들어온 값들을 처리할 수 있는 구조를 가지고 처리한다. 이런 구조를 reflect 패키지를 제공하여 interface{} 내부적인 상세 구조에 접근할 수 있도록 함수와 메시지를 제공한다. reflect 패키지의 핵심은 Type, Value이고 이것은 실제 리터럴이 가진 타입과 밸류를 처리해주는 대표적인 것들이다. reflect 패키지는 기본 함수 TypeOf(), ValueOf() 가 제공되어 실제값에 대한 타입과 값을 처리하도록 되어있다.

golang 패키지별로 함수 호출하기

aaa/main/main.go aaa/add/add.go aaa/add/sub/sub.go aaa/multi/multi.go aaa/multi/div/div.go ​ 디렉토리를 구조를 정해서 실질적으로 패키지호출은 디렉토리에 맞춰 호출하여 사용한다. ​ 이름이 충돌날 수 있으므로 동일한 이름은 가끔적 피햇 사용해야 한다.    // main/main.go package main  import (    "fmt"    "add"    "add/sub"    "multi"    "multi/div" ) func main() {    fmt.Println("hello world ")    fmt.Println(" add ", add.Add(3,3))    fmt.Println(" subb ", add.Subb(3,3))    fmt.Println(" sub ", sub.Sub(6,3))     fmt.Println(" multi ", add.Multi(6,3))      fmt.Println(" mul ", multi.Mul(6,4))      fmt.Println(" div ", div.Div(6,2)) }  //add/add.go package add import (    "multi"    "add/sub" ) func Add(x, y int) int {    return x+y } func Subb(x,y int) int {       return sub.Sub(x,y) } fu...

golang namespace 처리하기

golang에서는 같은 패키지는 동일한 것으로 보고 호출하여 사용할 수 있다. import 단위도 패키지이므로 패키지내에 패키지를 두면 별도의 영역으로 인식하므로 패키지를 import 해야 한다.  //main/main.go package main  import (    "fmt"    "add" ) func main() {    fmt.Println("hello world ")    fmt.Println(" add ", add.Add(3,3))    fmt.Println(" subb ", add.Subb(3,3))    fmt.Println(" sub ", add.Sub(6,3)) } //add/sub.go package add import ( ) func Sub(x, y int) int {    return x -y }  //add/add.go package add import ( ) func Add(x, y int) int {    return x+y } func Subb(x,y int) int {       return Sub(x,y) }

얼랭 변수가 확정되는 시기.

1. =   패턴매칭 오퍼레이션 ​       얼랭은 변수 정의가 별도로 없다. 변수가 정의되면 처음으로 할당될 때  변수가 정의 되므로 패턴매칭 연산자를 사용하면 패턴매칭과 동일한 값을 변수에 할당한다. ​      X = 1. ​     X가 아직 사용하고 있지 않으면 1의 값이 X변수와 바운드된다. ​ 2. 함수 인자 패턴매칭     함수가 정의되면 인자로 변수가 사용되면 그 인자는 함수가 호출되는 시점에 바운드 된다. ​        >F  =  fun(Pid) -> Pid end.        >F(1).​        >1​        > Pid = self().        > F(Pid). ​       > ​        함수가 정의된 부분은 함수 패턴매칭시 변수가 세팅된다.        함수는 호출할때마다 스택을 만들고  메모리 관리영역을 별도로 생성하므로 함수호출시 마다 변수에 할당된다. ​ 3. 패턴 이나 표현식에 사용한 경우      처음 바인딩 할때 변수가 정의되므로 바인딩 된 것에 대해 명확히 체크해야 에러가 없다. ​