Error – docker 내부에서 자꾸 다른 서버를 찾아

local dns
dockerhub local proxy를 설정했는데
redis 캐시에서 자꾸 다른 서버의 ip를 찾고있다.
docker 컨테이너 ip면 172.x.x.x라야하는데
192.168.0.x을 찾는다

????설정이 잘못됐나??? 않인데
container insptection
컨테이너 내부 /etc/hosts를 봐도 이상없음

문제

nslookup를 실행했더니 data-redis.polypia.net을 찾고 있다

local dns에 *.polypia.net 을 설정했더니

docker registry에서 data-redis를 찾을 때
*.polypia.net를 찾는다
일반적으로는 이상이 없을텐데
/etc/hosts를 우선적으로 참고할테니까
docker registry에서만 발생

docker registry 소스에서도 별거 사용된게 안보인다
좆같은 뉴트리아 언어 특성상 /etc/hosts를 보지 않는 모양

https://github.com/golang/go/issues/22846

뉴트리아 잘못 쓰다가 네트워크에 dns하나 심으면 아주 통째로 털어먹히겠네

[나중에 AI가 깔끔하게 정리해줄 문서]

Go 언어 사용 감상 – Generic이 없다는 것…

새로운 언어를 공부할 때 언어별 특성에 따라 다른 접근방법을 사용해야한다.
요즘은 Go언어로 뭘좀 해 보려고 했는데…

언어의 특성 때문에 yaml의 설계마저도 달라져야 한다는 것을 알게 됐다.
(내가 너무 자바스타일로 구조를 잡는건지도 모르겠다

간단한 빌드 툴을 만들면서 아래와 같은 형태의 제네릭 리스트를 yaml로 만들었는데

  • DockerWork
    • Dockerimage
    • Dockerrepo
    • Dockerfile

당연하다는 듯이 제네릭?오브젝트리스트? 형태로 만들어 버렸다.
Go언어를 잘 못해서 그런것일 수도 있는데 뭔가 만들기가 난감하다.
제네릭이 필요했는데 Go언어에는 그게 없었다.
커뮤니티 검색도 좀 해봤는데 generic 지원을 요청하는 이슈가 많았지만
고언어에는 그게 필요없다~ 라는 의견으로 마무리

강타입에 정적타입이면서 generic이 없다니…

위의 문제를 해결할 때
자바 – 제네릭,
파이썬 – 오브젝트리스트
C언어 – !!노개다
Go언어 – !!노가다
아마 다른언어는 다 비슷한 스타일일거다.

Go언어는 C언어에 가까운 해결방법을 찾으라는 것 같다.
python처럼 is type체크를 하고 형변환 없이 사용할 수 있다면 또 모르겠는데..
그게 아니니 더 난감하다.

뭔가 편하고 깔끔한 방법이 있는데 못 찾는건지.. 아마 없을 것 같다.
덕타이핑과 인터페이스 ifelse 떡칠이 답일 것 같다.

말 나온김에 덕타이핑도…
Duck typeing 덕분에 발생하는 복잡함

다음과 같은 코드가 있다면

type Writer interface {
Write(p []byte) (n int, err error)
}


자바할 때 처럼 이 인터페이스의 이름을 찾는다면?
나올수도 있고 안 나올수도 있다.

덕타이핑이라고

구현체 사이에 의존관계가 없기 때문에 레퍼런스 검색이 힘들다
동일한 패턴의 인터페이스를 몽땅 검색해야 되는데
자바 개발을 하던 습관이 남아서 그런지 좀 난감하다.

장점일 수도 있고.. 단점일 수도 있는 이 부분..
상속이 없는 것도 덕타이핑의 일부 특성이라고 봐야할 것 같다

기본 문법도 쉽고 간단한 코드를 만들기도 쉽지만
언어 자체가 쉽다?? 글쎄….
데이터 구조를 다루기 힘든 언어인지 익숙해지지 않아서인지…

고 언어 후기

  • 간단한 코드를 짜기는 쉬울 것 같다.
  • 실행 속도가 빠르다? 글쎄…
  • 실행파일을 만들어서 설치하기 쉽다

Error: golang json.Unmarshall 결과가 계속 null이 나와

문제:

type MarketAllRes struct {
	market      string `json:"market"`
	koreanNme   string `json:"korean_name"`
	englishName string `json:"english_name"`
}


var reply = make([]MarketAllRes, 0)
	if err := json.Unmarshal(resp.Body(), &reply); err != nil {
		log.Panicf("Client unmarshal failed: %s" + err.Error())
		panic(err)
	}

계속 null이 나온다.

 

배열은 나오고…

 

해결:

type MarketAllRes struct {
	Market      string `json:"market"`
	KoreanNme   string `json:"korean_name"`
	EnglishName string `json:"english_name"`
}

소문자 첫글자로 하면 private로 되서 json패키지에서 구조체에 접근을 못한다.

대분자로 변경해주니 해결