[Go언어] gorilla websocket request origin 에러

websocket: request origin not allowed by Upgrader.CheckOrigin 위 에러 발생시 upgrader.CheckOrigin = func(r *http.Request) bool { return true } 위 코드를 추가해준다. 필요에 따라 origin check 로직을 추가해주면 된다.

June 2, 2021 · 1 min · icecat471

[Go언어] Closure

클로저(closure) 함수를 일급객체로 취급하는 함수형 프로그래밍 언어(Erlang, Scala, Haskell 등)에서 사용되는 중요한 특성이다.클로저에 대해 MDN은 아래와 같이 정의하고 있다. “A closure is the combination of a function and the lexical environment within which that function was declared.” “클로저는 함수와 그 함수가 선언된 렉시컬 환경의 조합이다.” 아래의 예제를 먼저 확인해 보자 package main func outerFunc() func() { x := 10 innerFunc := func() { fmt.Println(x) } return innerFunc } func main() { f := outerFunc() f() // output: // 10 } scope는 함수를 호출할 때가 아니라 어디에 선언하였는지에 따라 결정된다....

May 25, 2021 · 2 min · icecat471

[Go언어] 슬라이스에서 요소 삭제

순서가 중요한 경우 package main import "fmt" func remove(slice []int, s int) []int { return append(slice[:s], slice[s+1:]...) } func main() { var Slice1 = []int{1, 2, 3, 4, 5} fmt.Printf("slice1: %v\n", Slice1) Slice2 := remove(Slice1, 2) fmt.Printf("slice2: %v\n", Slice2) } 실행 결과 slice1: [1 2 3 4 5] slice2: [1 2 4 5] 순서가 중요하지 않은 경우 package main import "fmt" func remove(s []int, i int) []int { s[i] = s[len(s)-1] return s[:len(s)-1] } func main() { var Slice1 = []int{1, 2, 3, 4, 5} fmt....

May 22, 2021 · 1 min · icecat471

[Go언어] VSCode에서 gopls 에러가 날때

vscode에서 아래와 같은 에러 발생시 gopls requires a module at the root of your workspace. You can work with multiple modules by opening each one as a workspace folder. settings.json 파일에 아래와 같이 추가하고 vscode를 재실행한다. "gopls": { "experimentalWorkspaceModule": true, },

April 16, 2021 · 1 min · icecat471

Go언어 log.SetPrefix()

package main import ( "fmt" "log" ) func init() { log.SetPrefix("Blockchain: ") } func main() { fmt.Println("test") log.Println("test") } 실행시켜보면 test Blockchain: 2021/04/15 15:04:03 test

April 15, 2021 · 1 min · icecat471

Go언어 defer와 panic

출처: 예제로 배우는 Go 프로그래밍 1. defer 특정 문장 혹은 함수를 defer를 호출하는 함수가 return하기 직전에 실행하게 한다. package main import "os" func main() { f, err := os.Open("1.txt") if err != nil { panic(err) } // main 마지막에 파일 close 실행 defer f.Close() // 파일 읽기 bytes := make([]byte, 1024) f.Read(bytes) println(len(bytes)) } 2. panic 함수를 즉시 멈추고 defer를 모두 실행한 뒤 즉시 리턴.이것은 콜스택을 따라 상위함수에도 모두 적용....

April 13, 2021 · 1 min · icecat471

Go언어 flag 패키지를 통한 command-line flag 파싱

golang flag package command-line flag를 파싱해주는 패키지. // flag값에 저장된 int64변수의 주소값 반환 maxValue := flag.Int64("max", 10, "Defines maximum value") /* xxxVar() 함수는 반환값이 없고 첫번째 인자로 변수의 포인터를 넘겨주면 변수에 값을 할당해줌. */ var minValue int64 flag.Int64Var(&minValue, "min", 0, "Defines minimum value") // flag에 command-line 파싱 // 꼭 호출해주어야 함 flag.Parse()

April 12, 2021 · 1 min · icecat471

Go언어 프로젝트 외부의 모듈 import하기

go.mod 파일에서 require ( <모듈명> v0.0.0 ) replace <모듈명> v0.0.0 => ../module // 이런 형태로 경로를 지정해줌

April 12, 2021 · 1 min · icecat471