Go lang 실습
-
golang wailsGo lang 실습 2024. 3. 16. 09:43
최근 크로스 플랫폼(PC, Mac) 앱 제작을 위해 다양한 테스트를 해보았다. electron, nw.js, wails, flutter 일단 이 중에 golang을 백엔드로, 웹뷰를 프론트엔드로 사용하는 wails가 나에겐 가장 생산성이 높고 편했다. 일렉트론 같은 웹 베이스 UI는 앱에 웹 브라우저를 포함해서... 빌드 후 용량이 수십~백 메가바이트 이상이 되는 단점이 있다. 그런데 wails는 hello world를 빌드 해보면 8(?)메가바이트 정도로 매우(?) 가볍다. (네이티브 언어와 비교할 정도는 아니지만) 비결은 OS에 내장된 웹 브라우저(웹뷰)를 이용하기 때문에 별도의 웹 브라우저를 내장하지 않아서 가벼운 것.. 이제는 익스플로러처럼 심각히 파편화된 브라우저는 없고... 브라우저 별 약간의..
-
golang wasm - 2Go lang 실습 2024. 3. 6. 17:29
자바스크립트에서 고의 함수를 호출하는 예... 다른 언어를 넘나들기 위해서는 자료형 부분이 가장 먼저 신경 쓰이는데.. package main import ( "fmt" "syscall/js" ) func main() { js.Global().Set("greet", js.FuncOf( func(this js.Value, args []js.Value) interface{} { if len(args) == 0 { return "Hello, World!" } return fmt.Sprintf("Hello, %s!", args[0].String()) })) select {} } js.Value라는 자료형을 이용해서 args를 받고.. 함수의 결과는 빈 인터페이스를 이용해서 보내는 군... 문자열을 주고 받는 건..
-
golang wasm - 1Go lang 실습 2024. 3. 5. 16:31
웹어셈블리 (WebAssembly) https://dongwoo.blog/2017/06/06/%EB%B2%88%EC%97%AD-%EC%B9%B4%ED%88%B0%EC%9C%BC%EB%A1%9C-%EC%86%8C%EA%B0%9C%ED%95%98%EB%8A%94-%EC%9B%B9%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC/ https://namu.wiki/w/WebAssembly https://ko.wikipedia.org/wiki/%EC%9B%B9%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC https://d2.naver.com/helloworld/8786166 https://reintech.io/blog/a-guide-to-gos-syscall-js-package..
-
golang 클로저, 생성자Go lang 실습 2021. 8. 14. 22:13
클로저의 일반적인 형태 package main import "fmt" func test() func(int) int { a := 0 addOne := func(x int) int { a += x return a } return addOne } func main() { t := test() fmt.Println(t(1)) // 1 fmt.Println(t(1)) // 2 fmt.Println(t(2)) // 4 } test 함수 안의 a와 addOne를 묶어서 클로저라고 한다. addOne 함수 밖에 있는 변수 a를 함수 내에서 사용했다. 이런 함수와 변수 세트를 클로저 라고 한다. (closure: 닫힘) 재미있게도 a가 사라지지 않고 계속 기억된 상태이다. 이를 이용해서 생성자를 만들 수 있다. pac..
-
golang: slice & arrayGo lang 실습 2021. 8. 12. 08:15
go는 call by value만 지원합니다. call by reference와 비슷하게 쓰려면 포인터 값을 전달하면 됩니다. array는 당연히 call by value 방식으로 작동합니다. 그것만 지원하니까요.. package main import "fmt" func addOne(arr [4]int) { for i := range arr { arr[i]++ } fmt.Println("addOne:", arr) } func main() { a := [4]int{1, 2, 3, 4} addOne(a) fmt.Println("main:", a) } addOne: [2 3 4 5] main: [1 2 3 4] 상식적입니다. 위에서 언급한데로 포인터를 이용해서 call by reference 비슷하게 사용해 ..
-
golang: sliceGo lang 실습 2021. 8. 8. 23:41
슬라이스는 간단해 보이지만 c언어의 포인터 개념이 없다면 꽤 헛갈릴 수도 있을 것 같다. package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} slice1 := nums[:4] fmt.Println(slice1) // [1,2,3,4] slice1[3] = 6 fmt.Println(slice1) // [1,2,3,6] fmt.Println(nums) // [1,2,3,6,5] slice1 = append(slice1, 0) fmt.Println(slice1) // [1,2,3,6,0] fmt.Println(nums) // [1,2,3,6,0] } 상식적이다. 1~5까지 nums 슬라이스를 만들고, 이중에 4개만 slice1이 '참조(같..
-
Fibonacci closure (피보나치 클로저)Go lang 실습 2021. 7. 30. 15:42
클로저를 이용해 피보나치 수열을 출력해 봅시다. package main import "fmt" func fibonacci() func() int { a, b := 0, 1 return func() int { a, b = a+b, a return b } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } } 0 1 1 2 3 5 8 13 21 34
-
[golang] array, slice, map 함께 쓰기Go lang 실습 2020. 12. 14. 18:16
이런 array는 어떻게? [{"1": 2, "3": 4}, {"5": 6}, {"7": 8, "9": 0}] package main import ( "fmt" ) func main() { array_map := [3]map[string]int{} array_map[0] = map[string]int{"1": 2} array_map[0]["3"] = 4 array_map[1] = map[string]int{} array_map[1]["5"] = 6 array_map[2] = map[string]int{"7": 8, "9": 0} fmt.Println(array_map) // [map[1:2 3:4] map[5:6] map[7:8 9:0]] } 선언된 맵은 (reference 타입이므로) nil 값을 갖으..