UI 상태
HTTPS 연결
⇒ cert manager → clusterissuer → certicate함께 배포
pod 컨디션 (status, reason, message)
- probe
- health check API
사용자 데이터의 persistency 보장
⇒ PVC -pv 프로바이징
컨테이너로그
사이드카로 모니터링
헬름차트
fabric8 vs k8s offical client
Http stuatus code / restful API는 부족하다
soft-delete가 patch/delete?
[ 1. Variable & Constant ]
Variable
- var <변수명> <type> = <초기값>
- 타입 추론 <변수명> := <값>
var i,j int = 1, 2, 3
n := 10
Constant
- iota : 0번 부터 시작하는 상수 열거형 at (enum을 만들 거나 할 때)
const (
apple = iota // 0
grape // 1
orange // 2
)
const (
r = 1 << iota // 1
g // 3
b // 4
)
[ 2. Datatype ]
String
- backQuote(’’)
- DoubleQuote(’’)에서만 /n 과 같은 문자열 해석이 가능
👉
go에서는 type conversion 문제가 발생했을 때,
compile error가 아닌 runtime error가 발생 ( 오류 체크 할 때 주의 필요! )
compile error가 아닌 runtime error가 발생 ( 오류 체크 할 때 주의 필요! )
Pointer
- &k - 주소 할당
- *p - 해당 주소의 실제 내용
var p = &k //k의 주소를 할당
println(*p) //p가 가리키는 주소에 있는 실제 내용을 출력
[ 3. Collection ]
Array
- zero-base 초기화가 자동
- var <변수명> [크기]<type>
var a [3]int // zero-base
var a1 = [3]int{1, 2, 3}
< 응용 : Slice >
- python처럼 sub slice 이용
- slice[start idx : end idx +1 ]
s := []int{0, 1, 2, 3, 4, 5}
s = s[2:5] // 2, 3, 4
s = s[1:] // 3, 4
< 응용 : append 활용 >
func main() {
sliceA := []int{1, 2, 3}
sliceB := []int{4, 5, 6}
sliceA = append(sliceA, sliceB...)
//sliceA = append(sliceA, 4, 5, 6)
fmt.Println(sliceA) // [1 2 3 4 5 6] 출력
}
Map
- 기본형 map [key_type] value_type
- 키 값 확인 key_val, exists := map["value"]
myMap := map[string]string{
"keya": "AAA",
"keyb": "BBB",
"keyc": "CCC",
"keyd": "DDD",
}
// map 키 체크
val, exists := tickers["EEE"]
if !exists {
println("No key")
}
[ 4. 조건문 / 반복문 ]
if / else if / else
- ( )는 안 쓰지만 { }는 필수
- else if/else를 쓸 때는 반드시 전 조건의 마지막 ‘}’ 와 같은 라인에 써준다.
- 다중 조건 ‘;’ 로 가능
if k == 1 {
println("One")
} else if k == 2; k==3 { // 다중 조건
println("Two")
} else { //같은 라인
println("Other")
}
for (no while)
- 반복문에서 while이 없음
- ( )는 사용하지 않음
for i := 1; i <= 100; i++ {
}
for n < 100 { // while문 역할
}
for { // 무한반복
}
< 응용 : range >
- python처럼 range 사용 가능 (단 index까지 반드시 포함)
- 기본적으로 break 사용가능
⇒ 즉 index와 리스트에서 뽑은 데이터 총 2개의 값을 for range에서 이용
names := []string{"lee", "kim", "park"}
for index, name := range names {
println(index, name)
}
< 응용 : 중첩 루프 탈출 : break[Label] >
- label을 이용하여 for문을 건너뛰고 반복문 탈출 가능
- label은 for문 앞에 선언되며, 여러 개의 for문을 한번에 탈출 가능
OuterLoop:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 { // 1,1이면 바로 모든 루프 탈출
break OuterLoop
}
fmt.Println(i, j)
}
}
fmt.Println("바로 open loop 탈출")