반응형
반응형
최근 인프라 관련 오픈소스에 관심을 가지게 되면서
대부분의 인프라 툴의 베이스 언어이자, 구글에서 개발한 언어인
Golang에 대한 관심을 가지게 되었고,
공부하는 과정을 공유하고자 한다.
Go 설치
맥의 경우 zsh을 사용한다면 brew를 활용해서 쉽게 설치 할 수 있다.
brew install go
go version
Go 실행 & 빌드
go는 실행할때 IDE를 사용한다면 run 버튼이 있지만 IDE에서 터미널을 활용해서 사용하는 것이 오히려 더 편했다.
// ex) 현재 dir에 있는 file.go를 실행
go run ./{file}.go
// ex) 현재 dir에 있는 file.go를 빌드 실행가능한 file 바이너리 파일이 생성된다.
go build ./{file}.go
변수 선언
var : 함수 안밖으로 사용 가능, 변수 선언과 값 할 당 분리 가능
:= : 함수 내에서만 사용 가능, 변수 선언과 값 할당이 같은 라인에서 이루어져야함
// 변수 선언 예시
var a sting = "hello"
var js = 22
var a, b, c, d int = 1, 3, 5, 7
var a, b = 6, "Hello"
c, d := 7, "World!"
var (
a int
b int = 1
c string = "hello"
)
상수 선언
const로 변수와 동일하게 선언
타입을 선언하지 않으면 자동으로 타입을 유추함 (like pyrhon)
// 상수 선언 예시
const a sting = "hello"
const js = 22
const a, b = 6, "Hello"
const (
a int
b int = 1
c string = "hello"
)
배열 선언
파이썬의 리스트와 유사하다(?)
var arr1 = [3]int{1,2,3}
arr2 := [5]int{4,5,6,7,8}
//추론된 길이
var arr1 = [...]int{1,2,3}
arr2 := [...]int{4,5,6,7,8}
슬라이스
배열과 유사하나 큰 차이는 배열은 길이가 정해져있지만 Slices는 동적이다.
길이가 7인 배열의 1:3 까지의 값을 슬라이스로 가져오면 길이가 6인 1:3값을 가진 슬라이스가 생성됨
len()은 값이 들어있는 길이이고 cap은 값이 들어갈 수 있는 길이이다.
func main() {
var arr1 [7]int = [7]int{1, 2, 3, 4, 5, 6, 7}
fmt.Println(arr1)
fmt.Printf("%d %d\n", len(arr1), cap(arr1))
var arr2 []int = arr1[1:3]
fmt.Println(arr2)
fmt.Printf("%d %d\n", len(arr2), cap(arr2))
}
//excute 실행결과
❯ go run main.go
[1 2 3 4 5 6 7]
7 7
[2 3]
2 6
------------
func main() {
var arr1 [7]int = [7]int{1, 2, 3, 4, 5, 6, 7}
fmt.Println(arr1)
fmt.Printf("%d %d\n", len(arr1), cap(arr1))
var arr2 []int = arr1[1:3]
fmt.Println(arr2)
fmt.Printf("%d %d\n", len(arr2), cap(arr2))
for k := range arr2 {
arr2[k] += 1
}
fmt.Println(arr2)
fmt.Printf("%d %d\n", len(arr2), cap(arr2))
fmt.Println(arr1)
}
// arr2에서 가져온 arr1의 값을 변환하면 arr1 에도 적용된다.
❯ go run main.go
[1 2 3 4 5 6 7]
7 7
[2 3]
2 6
[3 4]
2 6
[1 3 4 4 5 6 7]
------------
// slice에서 capacity를 초과했을때 append를 하면 자동으로 길이 늘어남
func main() {
var arr1 [7]int = [7]int{1, 2, 3, 4, 5, 6, 7}
fmt.Println(arr1)
fmt.Printf("%d %d\n", len(arr1), cap(arr1))
var arr2 []int = arr1[1:3]
fmt.Println(arr2)
fmt.Printf("%d %d\n", len(arr2), cap(arr2))
for k := range arr2 {
arr2[k] += 1
}
fmt.Println(arr2)
fmt.Printf("%d %d\n", len(arr2), cap(arr2))
fmt.Println(arr1)
var arr3 []int = []int{1, 2, 3}
fmt.Println(arr3)
fmt.Printf("%d %d\n", len(arr3), cap(arr3))
arr3 = append(arr3, 4)
fmt.Println(arr3)
fmt.Printf("%d %d\n", len(arr3), cap(arr3))
arr3 = append(arr3, 5)
fmt.Println(arr3)
fmt.Printf("%d %d\n", len(arr3), cap(arr3))
arr4 := make([]int, 3, 9)
fmt.Println(arr4)
fmt.Printf("%d %d\n", len(arr4), cap(arr4))
}
go run main.go
[1 2 3 4 5 6 7]
7 7
[2 3]
2 6
[3 4]
2 6
[1 3 4 4 5 6 7]
[1 2 3]
3 3
[1 2 3 4]
4 6
[1 2 3 4 5]
5 6
[0 0 0]
3 9
반응형
'golang' 카테고리의 다른 글
[golang] kubernetes Operator 만들기 Kubebuilder Controller-runtime 3 - Manager (1) | 2023.11.14 |
---|---|
[golang] kubernetes Operator 만들기 Kubebuilder Controller-runtime 2 - Overview (1) | 2023.11.14 |
[golang] kubernetes Operator 만들기 Kubebuilder Controller-runtime 1 - Controller (0) | 2023.11.14 |
[golang] go kubernetes client-go를 이용한 쿠버네티스 관리 (0) | 2023.11.14 |
[golang] Golang pointer, routine 포인터, 고루틴 (2) | 2023.11.13 |