maps 패키지 활용Clear 기능이 없다maps 패키지의 Clear 메서드를 활용하면 한꺼번에 map의 원소를 삭제할 수 있다reload 메서드 수정ioutil 패키지가 deprecated됨에 따라 Esi path를 직접 열고 esi 파일을 읽을 수 있도록 수정했다(path.ReadDir)Set과 Clear는 리턴 타입 제외Delete 메서드에 found flag를 추가하여 값이 없을 경우에는 에러를 반환하도록 수정ScanRoutine 메서드 이름 수정scan으로 변경SetupAutoAxes 메서드 추가scan의 마무리 단계에서 호출ed -> dem -> mencoding/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 메서드 추가