maps
패키지 활용Clear
기능이 없다maps
패키지의 Clear
메서드를 활용하면 한꺼번에 map의 원소를 삭제할 수 있다reload
메서드 수정ioutil
패키지가 deprecated됨에 따라 Esi path를 직접 열고 esi 파일을 읽을 수 있도록 수정했다(path.ReadDir
)Set
과 Clear
는 리턴 타입 제외Delete
메서드에 found
flag를 추가하여 값이 없을 경우에는 에러를 반환하도록 수정ScanRoutine
메서드 이름 수정scan
으로 변경SetupAutoAxes
메서드 추가scan
의 마무리 단계에서 호출ed
-> d
em
-> m
encoding/json
패키지의 Unmarshal
함수를 통해 JSON 데이터를 파싱한다Golang cast memory to struct
nodeBuf := (*(*[1<<31 - 1]byte)(unsafe.Pointer(&en)))[:unsafe.Sizeof(EcatNode{})]
1. en
- 'EcatNode' 타입의 변수
- 메모리에 할당된 구조체의 주소 값을 가지고 있다
2. unsafe.Pointer(&en)
- en 변수의 주소값을 가리키는 포인터 역할
- Go 언어에서 포인터 연산을 지원하지 않는 불안전한 타입(unsafe)이므로 사용에 주의
- 메모리 누수 혹은 예기치 않은 동작을 야기할 수 있다
3. (*(*[1<<31 - 1]byte)(unsafe.Pointer(&en)))
- `unsafe.Pointer`를 `[]byte` 타입으로 형변환 후, 주소값을 가지고 있는 바이트 배열 생성
- `1<<31 - 1': 배열 크기, Go 언어에서 배열의 최대 크기로 제한되어 있는 값
4. [:unsafe.Sizeof(EcatNode{})]
- EcatNode 구조체 크기만큼의 바이트 슬라이스 생성
- 3에서 생성된 바이트 배열에서 EcatNode 크기만큼 자른 결과
- 생성된 슬라이스를 nodeBuf 변수에 할당
** 요약 **
- `en` 변수가 가리키는 EcatNode 구조체의 메모리를 바이트 슬라이스로 변환하는 코드
Dial
코드 제거Dial
을 호출하면 DB Connection에 대한 동시성 문제가 발생한다Dial
을 호출하고 해당 Connection
하나만을 사용하도록 코드 변경Close
메서드를 지연하는 코드를 추가하여 Connection
유지device1
으로 하드코딩 됨log.Fatalln
코드 대체Fatalln
함수는 로그를 출력하고 프로그램을 강제 종료시킨다log.Println
으로 에러 출력만 하도록 코드 변경Read
와 Send
에 mutex 추가Scan
과 ScanResult
메서드 추가