언어/Golang
-
[Golang] 파이썬 모듈 실행하기언어/Golang 2017. 2. 18. 13:14
파이썬 모듈을 go자체에서 import 하는 방법은 모르겠고.. exec 패키지를 사용해 리눅스에 파이썬 모듈을 command를 날리는 형식으로 실행합니다.// testpython 모듈 실행 코드 // testpython 모듈 내의 test_function()을 호출하여 반환 값을 print()하는 코드 command := "import testpython; print(testpython.test_function())" // 리눅스내 파이썬 명령어 실행 cmd := exec.Command("python3", "-c", command) out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) } // 결과출력 fmt.Println(string(o..
-
[Golang] AES ECB 모드 암호화 (PKCS5, PKCS7)언어/Golang 2017. 2. 17. 15:24
package main import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" "strings" ) func main() { /* *src 암호화 대상 *key 암호 key, 16bit면 AES-128, 32bit면 AES-256 */ src := "테스트 평문" key := "0123456789abcdef" crypted := AesEncrypt(src, key) AesDecrypt(crypted, []byte(key)) Base64URLDecode("") } func Base64URLDecode(data string) ([]byte, error) { var missing = (4 - len(data)%4) % 4 data += st..
-
[Golang] JSON 사용하기언어/Golang 2017. 2. 16. 20:44
Go에서 JSON을 사용하려면 encoding/json패키지를 import해야 합니다. 아래는 해당 패키지에서 제공하는 JSON 함수입니다.func Marshal(v interface{}) ([]byte, error): Go 언어 자료형을 JSON 텍스트로 변환func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error): Go 언어 자료형을 JSON 텍스트로 변환하고 사람이 보기 편하도록 들여쓰기를 해줌func Unmarshal(data []byte, v interface{}) error: JSON 텍스트를 Go 언어 자료형으로 변환key-value 구조 JSONJSON 직렬화아래는 맵 형태의 데이터를 JSON 형태로 변환하는 방법입니..
-
[Golang] const와 iota언어/Golang 2017. 2. 15. 20:22
아래와 같이 status 변수에 상태를 정의한다고 가정합니다.type status int const UNKNOWN status = 0 const TODO status = 1 const DONE status = 2 이러한 세 상수는 서로 연관이 있으므로 묶어서 쓸 수 있습니다.const ( UNKNOWN status = 0 TODO status = 1 DONE status = 2 ) 위와 같이 순서대로 수를 붙인다면 아래와 같이 iota를 사용할 수 있습니다. 또한 자료형도 첫 줄과 동일하게 묶입니다.const ( UNKNOWN status = iota TODO DONE ) iota는 순서대로 0, 1, 2 붙이는 것 이욍도 사용방법이 많습니다.const ( _ = iota // 첫 줄 무시 KB Byte..
-
[Golang] 구조체 (struct)언어/Golang 2017. 2. 15. 20:03
구조체는 필드들을 묶어놓은 것으로 다른 언어들의 구조체, 클래스, 레코드 등과 비슷한 역할을 합니다. 구조체를 이용하면 더 복잡한 자료형을 정의할 수 있습니다. 자료를 네트워크를 통하여 전송하거나 파일에 저장하고 불러오는 경우에는 직렬화 및 역직렬화 기법을 활용해야 합니다. JSON은 이런 직렬화 및 역직렬화 형식 중에 하나로, 복잡한 구조체를 어떻게 JSON 형태로 직렬화하고 역직렬화할 수 있는지도 확인해봅니다.구조체란?필드들의 모음 혹은 묶음을 구조체라고 합니다. 명명된 구성요소들을 필드라고 합니다. 배열이 서로 같은 자료형의 자료들을 묶어놓은 것이라면 구조체는 서로 다른 자료형의 자료들도 묶을 수 있습니다.선언var task = struct { title string done bool due *ti..
-
[Golang] 메서드(Method)언어/Golang 2017. 2. 15. 19:47
Go 언어는 객체지향 프로그래밍(OOP)을 고유의 방식으로 지원합니다. 타 언어의 OOP의 클래스가 필드와 메서드를 함께 갖는 것과 달리 Go 언어에서는 struct가 필드만을 가지며, 메서드는 별도로 분리되어 정의됩니다.Go 메서드는 특별한 형태의 func 함수입니다. 메서드는 함수 정의에서 func 키워드와 함수명 사이에 "그 함수가 어떤 struct를 위한 메서드인지"를 표시하게 됩니다. 흔히 receiver(리시버)로 불리는 이 부분은 메서드가 속한 struct 타입과 struct 변수명을 지정하는데, struct 변수명은 함수 내에서 마치 입력 파라미터처럼 사용됩니다. 예를 들어, 아래 예제는 Rect라는 struct를 정의하고 area() 라는 메서드를 정의하고 있습니다. func와 area(..
-
[Golang] 명명된 함수형 (Named Function)언어/Golang 2017. 2. 8. 20:48
명명된 자료형과 마찬가지로 함수 또한 사용자가 정의할 수 있습니다. type BinOp func(int, int) int두 정수를 넘겨받아 정수 하나를 반환하는 함수형을 BinOp형으로 정의하였습니다. 명명된 함수형도 자료형 검사를 실행합니다. func Test(f BinOp) { fmt.Println(f(3, 4)) }위의 함수를 호출할 때, 아래와 같이 호출한다고 가정합니다. Test(func (a, b int) int { return a+b })Test는 BinOp형을 인자로 받는데, 호출 시에는 그냥 정수 둘을 받ㄱ 정수 하나를 반환하는 함수를 넘겨줬습니다. 위의 코드는 컴파일 에러를 발생하지 않습니다. func(a, b int) int 자료형이 명명되지 않은 자료형이기 때문입니다. 양쪽 모두 명..
-
[Golang] 명명된 자료형 (Named Type)언어/Golang 2017. 2. 8. 20:26
go에서는 자료형에 새로 이름을 붙일 수 있습니다. 사실 rune형은 int32의 별칭입니다. 이런 자료형을 명명된 자료형(Named Type)이라고 합니다. type rune int32 엄밀히 말해서 int32 역시 명명된 자료형에 속합니다. 그러면 명명되지 않은 자료형 (Unnamed Type)은 어떤 것들이 있을까요type runes []rune type MyFunc func() int위와 같이 runes와 MyFunc는 이름 자체만으로 자료형을 지칭하는 것이기에 명명된 자료형이 되고, []rune과 func() int는 이름만으로 자료형을 지칭하는 것이 아니기 때문에 명명되지 않은 자료형으로 구분됩니다. 명명된 자료형과 명명되지 않은 자료형 모두에 type 예약어를 사용하여 새 이름을 붙여줄 수 ..
-
[Golang] 클로저를 사용해 생성기(generator) 생성언어/Golang 2017. 2. 8. 20:15
아래는 클로저를 사용하여 생성기(generator)를 만든 예제입니다.package main import ( "fmt" ) func NewIntGenerator() func() int { var next int return func() int { next++ return next } } func main() { gen := NewIntGenerator() fmt.Println(gen(), gen(), gen(), gen(), gen()) fmt.Println(gen(), gen(), gen(), gen(), gen()) } // 결과 // 1 2 3 4 5 // 6 7 8 9 10NewIntGenerator()는 함수를 반환하는 고계함수입니다. 또한 이 함수가 반환하는 함수는 클로저입니다. 반환하는 함수..
-
[Golang] 고계(고차)함수 (higher-order function)언어/Golang 2017. 2. 8. 19:55
말은 어렵지만 의미는 간단합니다. 함수를 파라미터 또는 인자값에 넣는 것입니다. 아래는 고계함수의 예제입니다.func ReadFrom(r io.reader, f func(line string)) error { scanner := bufio.NewScanner(r) for scanner.Scan() { f(scanner.Text()) } if err := scanner.Err(); err != nil { return err } return nil } func main() { r:= strings.NewReader("bill\ntom\njani\n") err := ReadFrom(r, func(line string) { // 람다함수와 같은 기능 fmt.Println("(", line, ")") }) if ..