'2017/09/06'에 해당되는 글 2건

  1. 2017.09.06 [golang] interface(인터페이스) 예제
  2. 2017.09.06 [golang] 함수.클로져 예제

go의 interface는 OO개념이 아니다. struct에서 적당히 호출할 수 있는 형태로 만들어줄 수 있다. 


package main

import "fmt"

type Rectangle struct {
X1 int
Y1 int
X2 int
Y2 int
}

type Get interface {
getX1() int
}

func main() {
r := Rectangle{1,1,2,2,}
showGet(r)
}

func (r Rectangle) getX1() int{
return r.X1
}

func showGet(get Get) {
x := get.getX1()
fmt.Println(x)
}


결과값은 1이다.






이 뿐 아니라 아무거나 넣을 수 있는 void * 이기도 하다.


package main

import "fmt"

func main() {
var a interface{}
printInterface(a)

a = 1
printInterface(a)

a = "a"
printInterface(a)

r := Rectangle{1,2,3,4}
printInterface(r)
}

func printInterface(i interface{}) {
fmt.Println(i)
}

type Rectangle struct {
X1 int
Y1 int
X2 int
Y2 int
}



결과는 다음과 같다.


<nil>

1

a

{1 2 3 4}


'golang' 카테고리의 다른 글

[golang] 매개 변수 받기  (0) 2017.09.08
[golang] 에러(error) 예제  (0) 2017.09.07
[golang] defer 예제  (0) 2017.09.07
[golang] 함수.클로져 예제  (0) 2017.09.06
[golang] 구조체 초기화/메소드 예제  (0) 2017.08.30
Posted by '김용환'
,


go의 함수는 호출하는 함수 위, 아래에 존재할 수 있다.  { 위치에 따라 에러가 날 수 있다...

package main

import "fmt"


func main() {
helloWorld()
helloWorldGivenString("Samuel")
}

func helloWorld() {
fmt.Println("HelloWorld")
}

func helloWorldGivenString(str string) {
fmt.Println("HelloWorld " + str)
}








리턴 값이 여러 개가 될 수 있고, 매개 변수에 가변 변수를 사용할 수 있다. 


package main

import "fmt"


func main() {
fmt.Println(getTwoInteger())

_, _, last := getThree()
fmt.Println(last)


total1 := sum(1,2,3)
fmt.Println(total1)


total2 := add(3)
fmt.Println(total2)
}

func getTwoInteger() (int, int){
return 1, 1
}

func getThree() (int, string, string){
return 1, "a", "b"
}

func sum(n...int) int {
var total = 0
for _, value := range n {
total += value
}

return total
}

func add(n int) int {
if n > 4 {
return 0
}
return n+add(n+1)
}


결과는 다음과 같다.


1 1

b

6

7



파서가 좋아서 그런지 대충 써도 가변 변수는 잘 동작한다.

n ...int

n...int

n ... int



다음은 함수를 변수에 할당할 수 있음을 보여주는 예제이다. 

package main

import "fmt"


func getTwoInteger() (int, int){
return 1, 1
}

func main() {
var function1 func() (int, int) = getTwoInteger
function2 := getTwoInteger

fmt.Println(function1())
fmt.Println(function2())
}

결과는 다음과 같다.


1 1

1 1




익명 함수를 사용하는 예제이다. 


package main

import "fmt"

func main() {
func() {
fmt.Println("Hello, World")
}()

f := func() {
fmt.Println("Hello, World")
}
f()
}

결과는 다음과 같다.


Hello, World

Hello, World




함수를 클로저(closure)로 사용할 수 있다. 클로저는 함수 바깥의 값을 참조하는 함수 값을 의미한다.


package main

import "fmt"


func minusValue(n int) func() int {
i := n
return func() int {
i--
return i
}
}

func main() {
next := minusValue(10)
fmt.Println(next())
fmt.Println(next())
fmt.Println(next())
fmt.Println(next())
}

결과는 다음과 같다.


9

8

7

6

'golang' 카테고리의 다른 글

[golang] 매개 변수 받기  (0) 2017.09.08
[golang] 에러(error) 예제  (0) 2017.09.07
[golang] defer 예제  (0) 2017.09.07
[golang] interface(인터페이스) 예제  (0) 2017.09.06
[golang] 구조체 초기화/메소드 예제  (0) 2017.08.30
Posted by '김용환'
,