일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알고리즘
- 코딩
- 브라우저 단축키
- 자동화
- 프로그래밍
- 편한 즐겨찾기 편집
- 스프링부트
- 기능 많은 브라우저
- 알고리즘분류
- mac 화면분할
- 스카이라인 열차
- spring boot
- 알고리즘 추천
- 커스텀단축키
- 소프트웨어 지표
- 알고리즘초보
- 코코테라스
- ui 커스텀
- 오블완
- 성능테스트
- 대규모 시스템 설계
- Java
- 가발자 인사이드아웃
- 판교퇴근길밋업
- JMeter
- 코드트리
- 초년생
- aws
- 조가사키 해안
- 알고리즘사이트
- Today
- Total
영감을 (inspire) 주고픈 개발 블로그
[프로그래밍 언어] Go언어 문법적 특징을 보자! -2 본문
Go의 특징 : http://inspire12.tistory.com/9
Go 문법 탐구 1 : http://inspire12.tistory.com/12
에 이어서
9. 함수 값, 함수는 값이자, 클로져
클로져는
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
10. 메소드, struct를 이용한다.
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
return float64(f)
}
11. 인터페이스 (메소드 들의 집합)
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
이런 식이다.
12. 에러
fmt
패키지의 다양한 출력 루틴들은 error
의 출력을 요청받았을 때 자동으로 이 메소드를 호출합니다.
(fmt 패키지에 에러처리용 출력도 저장 - 굉장히 실용적인거 같다.)
type error interface { Error() string }
---심화되는 내용
12. 웹서버
웹 서버는 http.Handler 에서 request를 제공하는데 이를 이용한다. 개인적으로 JSP를 사용하면서 많이 익혔던 부분이다.
go lang은 시스템 프로그래밍으로 개발된 언어지만 웹앱에 발전으로 프래임웍 쪽에서 이슈받으니 해보는 게 좋을 것 같다.
12. 동시성!
Goroutines : Go 런타임에 의해 관리되는 경량 쓰레드, C 쓰레드와 비슷
동일한 공간에서 실행되므로 자원접근은 반드시 동기화 되어야한다! (쓰레드 개념)
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
채널은 버퍼링이 될수 있습니다. 버퍼링이란 버퍼를 이용해서 전송을 한다는 겁니다.
package main import "fmt" func main() { c := make(chan int, 2) c <- 1 c <- 2 fmt.Println(<-c) fmt.Println(<-c) }
데이터 송신측은 더이상 보낼 값이 없다는 것을 알리기 위해 채널을 close
할 수 있습니다. 수신측은 다음과 같이 수신 코드에 두번째 인자를 줌으로써 채널이 닫혔는지 테스트 할 수 있다.
v, ok := <-ch
채널이 이미 닫혔고 더이상 받을 값이 없다면 ok
는 false
가 된다.
for i := range c
반복문은 채널이 닫힐 때까지 계속해서 값을 받는다.
주의: 송신측만 채널을 닫을 수 있습니다. 수신측에선 불가능. 이미 닫힌 채널에 데이터를 보내면 패닉이 일어납니다.
또하나의 주의: 채널은 파일과 다릅니다; 항상 닫을 필요는 없습니다. 채널을 닫는 행위는 오로지 수신측에게 더이상 보낼 값이 없다고 말해야 할때만 행해지면 됩니다. range
루프를 종료시켜야 할 때!