일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- FOR
- install
- tcp
- 책
- go언어
- write
- Golang
- go
- package
- Python
- bitcoin
- Close
- window
- 리뷰
- channel
- Callback
- mutex
- GO 언어
- C
- range
- 영화
- json
- File
- c++
- windows
- API
- http
- Sync
- JavaScript
- Linux
- Today
- Total
목록Golang (16)
Code Habit
리플렉션은 실행시점(Runtime, 런타임)에 인터페이스나 구조체 등의 타입 정보를 얻어내거나 결정하는 기능이다. package main import { "fmt" "reflect" } type Data struct { // 구조체 정의 a, b int } func main() { var num int = 1 fmt.Println(reflect.TypeOf(num)) // int var s string = "Hello, world!" fmt.Println(reflect.TypeOf(s)) // string var f float32 = 1.3 fmt.Println(reflect.TypeOf(f)) // float32 var data Data = Data{1, 2} fmt.Println(reflect.Typ..
원자적 연산은 더 이상 쪼갤 수 없는 연산이라는 뜻이다. 따라서 여러 스레드(고루틴), CPU코어에서 같은 변수(메모리)를 수정할 때 서로 영향을 받지 않고 안전하게 연산할 수 있다. 보통 원자적 연산은 CPU의 명령어를 직접 사용하여 구현되어 있다. 사용 예제이다. package main import { "fmt" "runtime" "sync" "sync/atomic" } func main() { runtime.GOMAXPROCS(runtime.NumCPU()) // 모든 CPU 사용 var data int32 = 0 wg := new(sync.WaitGroup) for i:=0; i
채널은 고루틴끼리 데이터를 주고받고, 실행 흐름을 제어하는 기능이다. 모든 타입은 채널로 사용할 수 있다. 그리고 채널 자체는 값이 아닌 레퍼런스 타입이다. 채널은 다음과 같이 공간을 할당 후 사용해야 한다. 이렇게 생성하면 동기 채널( synchronous channel )이 생성된다. make(chan 자료형) 채널은 다음과 같이 사용한다. 채널
클로저는 함수 안에서 함수를 선언 및 정의할 수 있고, 바깥쪽 함수에 선언된 변수에도 접근할 수 있는 함수를 말한다. func main() { a, b := 3, 5 f := func(x int) int { return a*x + b // 함수 바깥의 변수 a, b 사용 } y := f(5) fmt.Println(y) // 20 } 다음은 클로저를 사용하는 이유이다. func calc() func(x int) int { a, b := 3, 5 // 지역 변수는 함수가 끝나면 소멸되지만 return func(x int) int { return a*x + b // 클로저이므로 함수를 호출할 때마다 변수 a와 b의 값을 사용할 수 있음 } } func main() { f := calc() // calc함수를 ..
슬라이스는 레퍼런스 타입이다. 내장된 배열에 대한 포인터이므로 슬라이스끼리 대입하면 값이 복사되지 않고 참조(레퍼런스)만 한다. a := []int{1, 2, 3} var b []int// 슬라이스로 선언 b = a// a를 b에 대입해도 요소가 모두 복사되지 않고 참조만 함 b[0] = 9// 슬라이스는 참조이므로 a[0], b[0]의 값이 모두 바뀜 fmt.Println(a) // [9 2 3] fmt.Println(b) // [9 2 3] 마찬가지로 함수의 매개변수에 배열을 넘기면 복사가 되지만 슬라이스를 넘기면 참조만 하게 된다. 따라서 함수 안에서 슬라이스의 요소를 변경하면 함수 바깥에 있는 슬라이스도 값이 바뀐다. 슬라이스의 요소를 모두 복사할 때는 copy 함수를 사용한다. copy(복사될 ..
Go 언어는 모든 부분이 패키지로 되어 있고, 인터넷에 있는 소스 코드를 받아와서 바로 사용하기 때문에 기준 디렉터리가 필요하다. 기준 디렉터리 안에 들어 있는 디렉터리들과 역할이다. bin : 소스 파일을 컴파일하여 실행 파일이 생성되는 디렉터리. pkg : 패키지를 컴파일하여 라이브러리 파일이 생성되는 디렉터리이다. pkg 디렉터리 아래에는 '운영체제_아키텍처' 형식으로 디렉터리가 생성되고 그 안에 라이브러리 파일이 생성된다. src : 내가 작성한 소스 파일과 인터넷에서 자동으로 받아온 소스 파일이 저장되는 디렉터리이다. 환경 변수 GOPATH에 기준 디렉터리를 설정한다. $ export GOPATH=/home/pyrasis/project_folder // 리눅스 이렇게 설정된 뒤에는 인터넷에서 소..
Go 언어는 다음 웹사이트에서 운영체제별로 다운받아 설치할 수 있다. https://golang.org/dl/ Downloads - The Go Programming Language Downloads After downloading a binary release suitable for your system, please follow the installation instructions. If you are building from source, follow the source installation instructions. See the release history for more information about Go releases golang.org 리눅스 리눅스에서 설치하는 방법은 바이너리를 직접 ..
Go 언어의 문법은 C언어를 기반으로 하고 있으며, C++의 복잡한 문법 대신 간결한 문법을 추구하고 있다. Go 언어의 특징은 다음과 같다. 정적 타입, 강 타입 Go 언어는 자료형을 컴파일할 때 결정하는 정적 타입의 언어이고, 컴파일 또는 실행할 때 암시적 형변환이 일어나지 않는 강타입 언어이다. (동적타입 언어로는 Python, Ruby, JavaScript등 스크립트 언어들이 있고 정적 타입 언어로는 C, C++, JAVA, C# 등이 있다.) 컴파일 언어 Go 언어는 텍스트 형태의 소스 코드를 컴파일하여 기계어 형태로 된 실행 파일(바이너리)를 만들어낸다. 실행파일은 CPU에서 바로 실행되기 때문에 속도가 빠르고 간결한 것이 장점이다. 그리고 실행을 위해 덩치가 큰 가상 머신을 설치하지 않아도 ..