저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
핵심 정리
이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07
형태 | 함수 및 변수명 | 설명 |
---|---|---|
명령줄 옵션 | os.Args | 명령줄에서 설정한 옵션 |
flag.String | 명령줄 옵션을 받은 뒤 문자열로 저장 | |
flag.Int | 명령줄 옵션을 받은 뒤 정수로 저장 | |
flag.Float64 | 명령줄 옵션을 받은 뒤 실수로 저장 | |
flag.Bool | 명령줄 옵션을 받은 뒤 불로 저장 | |
flag.Parse | 명령줄 옵션(os.Args)의 내용을 각 자료형별로 분석 | |
flag.NFlag | 명령줄 옵션의 개수를 리턴 | |
flag.Usage | 명령줄 옵션의 기본 사용법 출력 | |
에러 처리 | fmt.Errorf | 형식을 지정하여 error 값을 만듦 |
log.Fatal | 에러 로그를 출력하고 프로그램을 완전히 종료 | |
log.Panic | 시간과 에러 문자열을 출력한 뒤 패닉을 발생시킴 | |
log.Print | 시간과 에러 메시지를 출력하며 프로그램을 종료하지 않음 |
단위 테스트는 소스 파일 이름에 _test.go를 붙이고, 함수 이름이 Test로 시작합니다(벤치마크 테스트는 Benchmark로 시작합니다).
package calc
import "testing" // 테스트 코드는 항상 testing 패키지를 가져옴
func TestSum(t *testing.T) { // 함수 이름은 Test로 시작, Test 다음의 함수 첫 글자는 대문자, 매개변수는 *testing.T
r := Sum(1, 2) // 덧셈 함수로 1과 2를 더하면 결과는 3이 나와야 함
if r != 3 { // 3이 아닐 때는 테스트 실패
t.Error("결괏값이 3이 아닙니다. r=", r) // 에러 발생
}
}
func BenchmarkSum(b *testing.B) {
for i := 0; i < b.N; i++ {
Sum(1, 2)
}
}
go test 명령을 실행하여 단위 테스트를 수행합니다.
C 언어 사용Go 언어에서 C 언어를 사용할 때는 주석 안에 C 언어 코드를 작성하면 됩니다.
package main
/*
#include <stdio.h>
int sum(int a, int b) // 덧셈 함수 작성
{
return a + b;
}
void hello() // Hello, world! 출력 함수 작성
{
printf("Hello, world!\n");
}
*/
import "C" // 주석으로 작성한 C 언어 코드 아래에 import "C"를 넣어줌
import "fmt"
func main() {
var a, b int = 1, 2
r := C.sum(C.int(a), C.int(b)) // C 언어 함수 sum 호출
fmt.Println(r) // 3
C.hello() // Hello, world!
}
C 언어의 메모리는 가비지 컬렉터가 관리하지 않습니다. 따라서 C 언어의 malloc 함수로 메모리를 할당했다면 반드시 free 함수로 해제해야 합니다.
C 언어에서 Go 언어 함수 사용C 언어에서 Go 언어 함수를 사용할 때는 함수위에 //export를 설정해주고, 주석 안에서 extern으로 선언해줍니다.
package main
/*
#include <stdio.h>
extern int sum(int a, int b); // Go 언어의 함수는 extern으로 선언
static inline void CExample() {
int r = sum(1, 2); // Go 언어의 sum 함수 호출
printf("%d\n", r);
}
*/
import "C"
//export sum
func sum(a, b C.int) C.int { // C 언어에서 사용할 수 있도록 매개변수와 리턴값 자료형을
// C 언어용으로 맞춰줌
return a + b
}
func main() {
C.CExample()
}
C 언어의 컴파일 옵션은 #cgo를 사용하여 설정합니다.
#cgo CFLAGS: -DHELLO_DEBUG=1 -I /home/pyrasis/hello/include
#cgo LDFLAGS: -L /home/pyrasis/hello/lib -lhello
#cgo LDFLAGS: -lz
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.