본문 바로가기

slice5

Effective Go - Array and Slice - 출처: https://go.dev/doc/effective_go#arrays - Arrays Go에서 Arrays는 주로 slice를 위한 block을 할당하는데 사용된다. Go와 C에서 array가 동작하는 방식의 주요 차이점은 아래와 같다. Arrays는 value 이므로 하나의 array를 다른 array에 할당하면 모든 요소들이 복사된다. 특히 array는 함수에 넘기면 함수는 해당 array의 pointer가 아니라 array의 복사본을 받는다. Array의 크기는 해당 type의 요소이므로 [10]int와 [20]int은 다르다. Value 특성은 유용하게 사용되긴 하지만 비용이 크다. 만약 C와 동일한 동작방식과 효율성을 원한다면 아래 코드처럼 array에 대한 pointer를 넘길 수 .. 2022. 5. 8.
Go - reflection - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/reflection - 개요 reflect package에 대해 알아본다. struct x을 받고 fn을 호출해서 재귀적으로 내부의 string field들을 모두 순회하는 함수 walk(x interface{}, fn func(string))를 작성해보자. 이번 챕터에서는 이 요구사항을 구현하기위해 reflection을 사용해볼것이다. - interface 여태까지는 string, int 형 처럼 Go에서 제공하거나, BankAccount와 같이 형을 정의한 type-safety만 다루었다. 그래서 참조할 문서를 쉽게 찾을 수 있었고, 만약 잘못된 형을 함수에 넘기면 컴파일러가 이를 미.. 2022. 1. 15.
Go - array, slice, test coverage 참조: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/arrays-and-slices - 개요 Go 에서 하나의 데이터 타입을 여러 개 저장할 수 있는 array 와 slice 에 대하여 알아본다. 또한 test coverage 와 array, slice 를 비교하는 reflect.DeepEqual 에 대해서도 알아본다. - Array & Slice Example array 의 수를 모두 더하면 얼마인지 구하는 기능을 구현해보자. 기능을 완성하고 나면 아래와 같이 array 를 인자로 받아서 단일값으로 반환하는 Sum 과 같은 함수를 호출할 것이다. test 값은 1,2,3,4,5 의 합이므로 기대값은 15이다. package main impo.. 2021. 12. 4.
Go - multiple input 과 return 참조: https://go.dev/doc/tutorial/greetings-multiple-people - 개요 이번에는 여러 개의 이름을 함수로 넘겨서 각 이름에 대한 인삿말을 반환하도록 코드를 수정해보자. - slice와 map 지금은 학습을 목적으로 코드를 작성하고 있으므로 Hello 함수의 인자와 반환형을 곧바로 변경해도 큰일이 일어나지 않는다. 그래도 좀 더 그럴싸한 상황을 가정해서 이미 greetings 모듈이 배포되어 사용하고 있다고 가정해보자. 이럴 때 Hello 함수의 인자와 반환형을 변경해서 배포해버리면 기존 사용자들의 프로그램이 제대로 동작하지 않을 수 있다. 이런 상황에서는 여러 인삿말을 반환하는 신규 함수를 추가해야 한다. 이렇게 하면 기존 함수의 호환성을 그대로 유지할 수 있다... 2021. 11. 28.
Go - random 과 slice 참조: https://go.dev/doc/tutorial/random-greeting - 개요 이번에는 하나의 인삿말 대신 미리 정의된 몇 가지 인삿말중 랜덤으로 하나를 반환해본다. - slice 여러개의 정보를 저장하기 위해서 Go 의 slice 를 사용해본다. slice 는 array 와 비슷한데 요소를 추가하거나 삭제 함에 따라 크기가 동적으로 변한다는점이 다르다. slice 는 Go 에서 매우 유용한 타입이니 숙지해보도록 하자. 3 개의 인삿말 형식을 갖고 있는 slice 를 추가하고 그중 하나를 random 하게 반환한다. greetings.go 코드를 아래와 같이 수정해보자. package greetings import ( "errors" "fmt" "math/rand" "time" ) // .. 2021. 11. 28.