'2017/09/07'에 해당되는 글 3건

  1. 2017.09.07 [golang] 에러(error) 예제
  2. 2017.09.07 [golang] defer 예제
  3. 2017.09.07 페이스북의 react js 특허 관련 동향


go언어에서 에러 발생에 대한 예제이다.


숫자 1만 받고 나머지는 에러로 표현하는 예제이다. 함수 뒤에 (..., error)로 표현한다. 

fmt.Errorf를 사용한다 하더라도 실제로 Error를 출력하지 않는다. log.Fatal과 함께 표현해야 에러 로그를 출력한다. 


package main

import (
"fmt"
"log"
)

func main() {
checkOnly1(1)
checkOnly1(-1)
}

func checkOnly1(n int) {
result, err := only1(n)
fmt.Println("result of only1 call :", result)
if (err != nil) {
log.Fatal(err)
}
}

func only1(number int) (bool, error) {
if number == 1 {
return true, nil
}
return false, fmt.Errorf("%d != 1", number)
}



결과는 다음과 같다.


result of only1 call : true

result of only1 call : false

2017/09/07 14:18:06 -1 != 1

exit status 1




go 언어 예제를 보면 아래처럼 많이 사용한다. 

req, err := http.NewRequest("GET", "url", *tag), nil)





error 소스를 보면 다음과 같다. 어디든지 사용할 수 있는 interface이다. 


type error interface {
Error() string
}





패닉(panic)을 써보자.


package main

import (
"fmt"
"log"
)

func main() {
checkOnly1(1)
checkOnly1(-1)
}

func checkOnly1(n int) {
//
//defer func() {
// r := recover()
// fmt.Println(r)
//}()

result, err := only1(n)
fmt.Println("result of only1 call :", result)
if (err != nil) {
fmt.Println("before panic")
log.Panic(err)
}

fmt.Println("after panic")
}

func only1(number int) (bool, error) {
if number == 1 {
return true, nil
}
return false, fmt.Errorf("%d != 1", number)
}


결과는 다음과 같다.


에러(패닉)이 발생하면서 exit status가 2(serious problem)를 리턴했다. 

바로 종료되지 않고 main 함수 모든 내용이 실행되었다. 



2017/09/07 23:56:42 -1 != 1

result of only1 call : true

after panic

result of only1 call : false

before panic

panic: -1 != 1


goroutine 1 [running]:

log.Panic(0xc42003df00, 0x1, 0x1)

/usr/local/go/src/log/log.go:322 +0xc0

main.checkOnly1(0xffffffffffffffff)

/Users/samuel.kim/go/src/google/Test.go:24 +0x29f

main.main()

/Users/samuel.kim/go/src/google/Test.go:10 +0x37

exit status 2




defer를 사용해 패닉이 발생하더라도 얌전히(?) 종료시킬 수 있다. 


package main

import (
"fmt"
"log"
)

func main() {
checkOnly1(1)
checkOnly1(-1)
}

func checkOnly1(n int) {

defer func() {
r := recover()
fmt.Println(r)
}()

result, err := only1(n)
fmt.Println("result of only1 call :", result)
if (err != nil) {
fmt.Println("before panic")
log.Panic(err)
}

fmt.Println("after panic")
}

func only1(number int) (bool, error) {
if number == 1 {
return true, nil
}
return false, fmt.Errorf("%d != 1", number)
}


순서가 어그러졌지만 패닉을 잘 막았다. 


result of only1 call : true

2017/09/07 23:58:29 -1 != 1

after panic

<nil>

result of only1 call : false

before panic

-1 != 1





'golang' 카테고리의 다른 글

[golang] 고루틴(go routine) 예제  (0) 2017.09.08
[golang] 매개 변수 받기  (0) 2017.09.08
[golang] defer 예제  (0) 2017.09.07
[golang] interface(인터페이스) 예제  (0) 2017.09.06
[golang] 함수.클로져 예제  (0) 2017.09.06
Posted by '김용환'
,

[golang] defer 예제

golang 2017. 9. 7. 11:58


defer는 함수를 사용하면 해당 함수를 호출한 함수가 종료할 때 호출된다.


package main

import "fmt"

func main() {
s := [5]int{10, 20, 30, 40, 50}
for i, number := range s {
fmt.Println(i, number)
}

println("\nßdefer--")
for i, number := range s {
defer fmt.Println(i, number)
}
}



결과는 다음과 같다.


0 10

1 20

2 30

3 40

4 50

defer--

4 50

3 40

2 30

1 20

0 10



스택에 쌓인 것을 하나씩 종료 하는 것처럼 보인다.


보통 소켓을 정리할 때 많이 사용된다. 


defer resp.Body.Close()





'golang' 카테고리의 다른 글

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



페이스북의 react js관련해 글이 있다.



https://code.facebook.com/posts/112130496157735/explaining-react-s-license/

사용자가 페이스북에 대해서 어떠한 특허 소송이라도 제기하는 경우 자동으로 React에 대한 특허 사용권한을 잃게 됩니다.


관련 github issue


https://github.com/facebook/react/issues/10191



페이스북 대응 - 우리는 그대로 간다!


https://code.facebook.com/posts/112130496157735/explaining-react-s-license/


We have considered possible changes carefully, but we won't be changing our default license or React's license at this time. We recognize that we may lose some React community members because of this decision. We are sorry for that, but we need to balance our desire to participate in open source with our desire to protect ourselves from costly litigation.





그러나.. 9월 22일 React16부터는 MIT 라이선스로 간다고 한다. 


https://code.facebook.com/posts/300798627056246


Next week, we are going to relicense our open source projects React, Jest, Flow, and Immutable.js under the MIT license. 



Posted by '김용환'
,