TIL (2022.05.26)

ay.zip·2022년 5월 25일
0

TIL

목록 보기
44/47
post-thumbnail

✅ 포스트 목차 ✅

➡️ Go-Tour 여기서 공부합니다.
1. 더 많은 타임들 : struct와 slice, map


더 많은 타임들 : struct와 slice, map

(1) Struct Literals

package main

import "fmt"

type Vertex struct {
	X, Y int
}

var (
	v1 = Vertex{1, 2}  // has type Vertex
	v2 = Vertex{X: 1}  // Y:0 is implicit
	v3 = Vertex{}      // X:0 and Y:0
	p  = &Vertex{1, 2} // has type *Vertex
)

func main() {
	fmt.Println(v1, p, v2, v3)
}
// output : {1,2} &{1,2} {1,0} {0,0}
// 만약 p-> *p 였다면 ? ->{1,2}

(2) Arrays

var a[10] int -> 10개의 정수들의 배열

(3) Slices

a[low:high] -> low ~ high-1
슬라이는 어떤 데이터도 저장 불가, 그냥 표시하는 역할

a[0:10]
a[:10]
a[0:]
a[:]
모두 같은 의미

슬라이스의 길이(슬라이스가 포함하는 요소의 개수) : len(a)
슬라이스의 용량(슬라이스의 첫 번째 요소부터 계산하는 기본 배열의 요소의 개수) : cap(a)

package main

import "fmt"

func main() {
	s := []int{2, 3, 5, 7, 11, 13}
	printSlice(s)

	// Slice the slice to give it zero length.
	s = s[:0]
	printSlice(s)

	// Extend its length.
	s = s[:4]
	printSlice(s)

	// Drop its first two values.
	s = s[2:]
	printSlice(s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

슬라이스의 zero value = nil

make함수로 슬라이스를 만들 수 있다. 동적 크기의 배열 생성.

a:=make([]int, 5) -> 길이가 5인 슬라이스
b:=make([]int,0,5) -> 길이는 0, 용량은 5

(4) Range

range는 인덱스와, 인덱스 값의 복사본을 리턴한다

var arr = []int {1,2,3,4,5}

for i,v := range arr{
	fmt.Printf("%d = %d\n", i, v)
}

output :
0 = 1
1 = 2
2 = 3
3 = 4
4 = 5

만약 변수가 하나만 들어간다면, 인덱스를 리턴한다.

슬라이스 연습하기
Pic 을 구현해봅시다. 이것은 dy 슬라이스의 길이와 dx 슬라이스의 각 요소를 8 비트 부호 없는 정수로 반환해야 합니다. 이 프로그램을 실행하면, 이것은 grayscale (well, bluescale) 값으로 변환된 그림을 보여줍니다.

이미지의 선택은 여러분에게 달려 있습니다. 흥미로운 함수로 (x+y)/2 , x*y , 그리고 x^y 를 제공합니다.

(루프를 사용하여 [][]uint8 안에 각 []uint8 을 할당해야 합니다.)

(타입 간에 변환하려면 uint8(intValue) 을 사용하세요.)

package main

import "golang.org/x/tour/pic"

func Pic(dx, dy int) [][]uint8 {
	im := make([][]uint8, dy)
	
	for y := range im{
		im[y] = make([]uint8,dx)
		
		for x:= range im[y]{
			im[y][x]=uint8((x+y)/2)
		}
	}
	return im
}

func main() {
	pic.Show(Pic)
}

(5) Maps

맵의 zero value = nil
m = make(map[string]Vertex)

맵의 리터럴 : 키가 필요하다

var m = map[string]Vertex{
	"Bell Labs": Vertex{
		40.68433, -74.39967,
	},
	"Google": Vertex{
		37.42202, -122.08408,
	},
}
  • 요소 추가하거나 업데이트하기
    m[key] = elem

  • 요소 검색하기
    elem = m[key]

  • 요소 제거하기
    delete(m,key)

  • 두 개의 값을 할당하며 키가 존재하는지 테스트 할 수 있다
    elem, ok = m[key]

if key is in m => ok = true ? false
if key is not in m : elem = 0

맵 연습하기
WordCount 를 구현해봅시다. 이것은 문자열 s 의 각 word 의 개수의 맵을 반환해야 합니다. wc.Test 함수는 제공된 함수를 테스트하고 성공 혹은 실패를 출력하는 함수입니다. strings.Fields가 도움이 될 수 있습니다.

strings.Fields = string을 분해해서 슬라이스로 리턴

package main

import (
	"golang.org/x/tour/wc"
	"strings"
)

func WordCount(s string) map[string]int {
	wd := strings.Fields(s)
	result := make(map[string]int)

	for _, ch := range wd {
		if result[ch] == 0 {
			result[ch] = 1
		} else {
			result[ch] += 1
		}
	}
	return result
}

func main() {
	wc.Test(WordCount)
}

0개의 댓글

관련 채용 정보