Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 구글클라우드서밋
- nnictl
- 딥러닝
- Kubernest
- 구글클라우드
- 네트워크
- cdk
- 구글
- 코세라
- aws
- AWS #빅데이터 #분석 #데이터
- 머신러닝
- 도커
- 클라우드 자격증
- Associate
- cloud
- 구글 클라우드
- 자격증
- 쿠버네티스
- DataFlow
- docker
- 마이크로서비스
- go
- 클라우드
- golang
- 구글클라우드플랫폼
- Dataproc
- GCP
- coursera
Archives
- Today
- Total
JD의 블로그
고랭(golang) 기초(2) 본문
기본 자료형
- 불리언
- bool
- 문자열
- string
- 정수
- int, int8, int16, int32(rune), int64
- uint, uint8(byte), uint16, uint32, uint64, uintptr
- 실수
- float32, float64
- 복소수
- complex64, complex128
구조체(Structs)
필드(데이터)들의 조합
type 선언으로 struct의 이름을 지정할 수 있다.
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
fmt.Println(Vertex{1,2})
}
- 구조체 리터럴(Struct Literals) : 필드와 값을 나열해서 구조체를 새로 할당하는 방법
import "fmt"
type Vertex struct{
X, Y int
}
var {
p = Vertex{1, 2}
q = &Vertex{1, 2}
r = Vertex{X: 1}
s = Vertex{}
}
func main() {
fmt.Println(p, q, r, s)
}
result: {1 2} &{1 2} {1 0} {0 0}
포인터(Pointers)
- Go에도 포인터가 있지만 포인터 연산은 불가능하다.
- 구조체 변수는 구조체 포인터를 이용해서 접근 할 수 있다.
- 포인터를 이용하는 간접 접근은 실제 구조체에도 영향을 미친다.
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
p := Vertex{1, 2}
q := &p
q.X = 1e9
fmt.Println(p)
}
result: {1000000000 2}
new 함수
- new(T) : T는 타입의 종류, 모든 필드가 0이 할당된 T 타입의 포인터를 반환한다.
var t *T = new(T) or t:= new(T)
# example
package main
import "fmt"
type Vertex struct {
X, Y int
}
func main() {
v := new(Vertex)
fmt.Println(v)
v.X, v.Y = 11, 9
fmt.Println(v)
}
슬라이스(Slices)
- 슬라이스는 배열의 값을 가리키며 배열의 길이를 가지고 있다.
- [ ] T 는 타입 T를 가지는 요소의 슬라이스(slice)이다.
- 슬라이스는 슬라이스 자르기(Slicing slices)도 지원 ex ) s[lo:hi] => lo 에서 hi-1의 요소를 포함하는 슬라이스
package main
import "fmt"
func main() {
p := []int{2, 3, 5, 7, 11, 13}
fmt.Println("p ==", p)
for i := 0; i < len(p); i++ {
fmt.Println("p[%d] == %d\n",
i, p[i])
}
}
- 슬라이스 만들기
- 슬라이스는 make 함수로 만들 수 있다. 이렇게 생성된 슬라이스는 0을 할당한 배열을 생성하고, 그것을 참조한다.
package main
import "fmt"
func main() {
a := make([] int, 5)
printSlice("a", a)
b := make([] int, 0, 5)
printSlice("b", b)
}
func printSlice(s stinrg, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
result :
a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
레인지(Range)
- python의 enumerate와 유사, for 문에서 range를 통해 슬라이스나 맵을 순회할 수 있다.
package main
import "fmt"
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
func main(){
for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}
}
result:
2**0 = 1
2**1 = 2
2**2 = 4
2**3 = 8
2**4 = 16
2**5 = 32
2**6 = 64
2**7 = 128
- _ 를 이용해서 인덱스(index)나 값(value)을 무시할 수 있으며, 값을 적지 않으면 인덱스만 표시된다.
연습 : 슬라이스
Pic 이라는 함수를 구현한다. 이 함수는 dy개 만큼의 길이를 가지는 슬라이스를 리턴해야 하는데, 각각의 요소들은 또한 dx개의 8비트 부호없는 8비트 정수 타입을 가지는 슬라이스이다.
더보기
package main
import "code.google.com/p/go-tour/pic"
func Pic(dx, dy int) [][]uint8 {
a := make([]uint8, dx)
b := make([][]uint8, dy)
for i := range a {
a[i] = uint8(i)
}
for i := range b {
b[i] = a
}
return b
}
func main() {
pic.Show(Pic)
}
'-프로그래밍 언어 > Golang' 카테고리의 다른 글
고랭(Golang) 기초(1) (1) | 2020.01.19 |
---|