일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C
- go언어
- windows
- Sync
- json
- 리뷰
- http
- write
- mutex
- go
- install
- channel
- Linux
- Golang
- 책
- API
- package
- FOR
- bitcoin
- window
- Python
- Close
- 영화
- tcp
- File
- Callback
- c++
- range
- GO 언어
- JavaScript
- Today
- Total
목록GO 언어 (9)
Code Habit
앞에서 포스팅한 "net/http" 패키지로 http 서버 구현 후 Get/Post 요청을 구분하여 처리하는 예제이다. 예제 - 서버 // main.go package main import ( "fmt" "io/ioutil" "net/http" ) func handler(rw http.ResponseWriter, req *http.Request) { fmt.Println("Method : ", req.Method) fmt.Println("URL : ", req.URL) fmt.Println("Header : ", req.Header) b, _ := ioutil.ReadAll(req.Body) defer req.Body.Close() fmt.Println("Body : ", string(b)) switch..
golang은 "net/http" 패키지를 통해 간편하게 http 서버를 만들 수 있다. 다음은 서버를 구현하는데 필요한 함수이다. func ListenAndServe(addr string, handler Handler) error : HTTP 연결을 받고, 요청에 응답 func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) : 경로별로 요청을 처리할 핸들러 함수 등록 사용예제 // main.go package main import ( "net/http" ) func main() { http.HandleFunc("/hello", func(res http.ResponseWriter, req *http.Request) { res.Wri..
마샬링 논리적 구조를 로우 바이트로 변경하는 것을 마샬링 or 인코딩이라 한다. 즉 Go 자료형을 바이트 슬라이스로 변경하는 것이다. 언마샬링 반대로 로우 바이트를 논리적 자료 구조로 변경하는 것을 언마샬링 or 디코딩이라 한다. encoding/json 패키지의 다음 함수들을 통해 go 자료형을 Json데이터로 변환하거나 반대로 Json데이터를 go 자료형으로 변환할 수 있다. func Marshal(v interface{})([]byte, error): Go 언어 자료형 -> JSON 데이터 변환 func MarshalIndent(v interface{}, prefix, indent string)([]byte, error): Go 언어 자료형 -> JSON 데이터 변환 & 들여쓰기 func Unmar..
time 패키지는 현재 시간을 구하거나, 일정한 시간을 측정하는 등 시간 관련 기능을 다룰 때 사용한다. - 현재 시간 구하기 & 포맷 변경 // main.go package main import ( "fmt" "time" ) func main() { // 현재 시간 now := time.Now() fmt.Println(now) // 2020-06--19 14:45:56.1516017 +0900 KST m=+0.006982201 // yyyy-mm-dd hh:mm:ss 형식으로 포맷 custom := now.Format("2006-01-02 15:04:05") fmt.Println(custom) // 2020-06-19 14:45:56 custom = now.Format("2006-01-02") fmt...
golang에서는 다양한 문자열 관련 함수들을 제공한다. 그 중 문자열 파싱할 때 자주 사용하는 몇 가지 함수들만 알아보겠다. func Contains(s, substr string) bool : s 안에 substr 이 포함되어 있는지 검사 -> true : 포함, false : 불포함 func ContainsAny(s, chars string) bool : s 안에 chars의 문자가 포함되어 있는지 검사 -> true : 포함, false : 불포함 func Count(s, substr string) int : s안에 substr문자열이 몇번 나오는지 검사 -> 개수 리턴 func Index(s, substr string) int : s안에 substr 의 위치를 구함(첫글자). 리턴값이 -1이면 ..
리플렉션은 실행시점(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
Go 언어는 모든 부분이 패키지로 되어 있고, 인터넷에 있는 소스 코드를 받아와서 바로 사용하기 때문에 기준 디렉터리가 필요하다. 기준 디렉터리 안에 들어 있는 디렉터리들과 역할이다. bin : 소스 파일을 컴파일하여 실행 파일이 생성되는 디렉터리. pkg : 패키지를 컴파일하여 라이브러리 파일이 생성되는 디렉터리이다. pkg 디렉터리 아래에는 '운영체제_아키텍처' 형식으로 디렉터리가 생성되고 그 안에 라이브러리 파일이 생성된다. src : 내가 작성한 소스 파일과 인터넷에서 자동으로 받아온 소스 파일이 저장되는 디렉터리이다. 환경 변수 GOPATH에 기준 디렉터리를 설정한다. $ export GOPATH=/home/pyrasis/project_folder // 리눅스 이렇게 설정된 뒤에는 인터넷에서 소..