go언어

Q2 := months[4:7]
summer := months[6:9]

len(Q2), cap(Q2)

배열은 복사가 되어 원본에 영향을 안준다.
슬라이스는 원본 배열에 영향을 준다. 포인터임.

Q2 := months[4:7]
summer := months[6:9]
fmt.Println(Q2) // [“April” “May” “June”]
fmt.Println(summer) // [“June” “July” “August”]
for _, s := range summer {
for _, q := range Q2 {
if s == q {
fmt.Printf(“%s appears in both\n”, s)
} }
}
fmt.Println(summer[:20]) // panic: out of range
endlessSummer := summer[:5] // extend a slice (within capacity)
fmt.Println(endlessSummer) // “[June July August September October]”


슬라이스는 nil or len(s) == 0 으로 비어있는지 체크해야함

var s []int // len(s) == 0, s == nil
s = nil // len(s) == 0, s == nil
s = []int(nil) // len(s) == 0, s == nil
s = []int{} // len(s) == 0, s != nil

append 함수는 cap 사이즈를 확인하고 가능하면 추가, 불가능하면 새로 생성함.

0 cap=1 [0]
1 cap=2 [01]
2 cap=4 [012]
3 cap=4 [0123]
4 cap=8 [01234]
5 cap=8 [012345]
6 cap=8 [0123456]
7 cap=8 [01234567]
8 cap=16 [012345678]
9 cap=16 [0123456789]

cap 사이즈 기준으로 복사 혹은 기존값을 사용하는 것이 다르므로 자기 자신에게 재할당해서 사용해라.
초기화할때 cap 사이즈를 고려해야 함. 사용시 복사가 일어날 수 있기 때문임. 아니면 재할당해서 사용해라.

map은 해쉬테이블의 참조이다.

ages := make(map[string]int) // mapping from strings to ints
ages := map[string]int{
“alice”: 31,
“charlie”: 34,
}
ages := make(map[string]int)
ages[“alice”] = 31
ages[“charlie”] = 34
ages[“alice”] = 32
fmt.Println(ages[“alice”]) // “32”

delete(ages, “alice”) // remove element ages[“alice”]

키 값이 없어도 에러가 나지는 않음. 0 값으로 리턴해줌.

맵은 변수가 아니므로 주소값을 사용할 수가 없다. 맵이 커지면 기존 원소에 재해시가 발생하여 새 주소공간으로 이동할 수 있어 무효화되기때문임.
제로값은 nil이다.

age, ok := ages[“bob”]
if !ok { /* “bob” is not a key in this map; age == 0. */ }


struct

type Employee struct {
ID int
Name string
Address string
DoB time.Time
Position string
Salary int
ManagerID int
}
var dilbert Employee

dilbert.Salary -= 5000

구조체 생성시 순서에 따라 타입이 달라질 수 있으므로 순서에 유의해야한다.
대문자로 생성하면 export가 되고 소문자는 안된다.

리터럴

type Point struct{ X, Y int }
p := Point{1, 2}
순서가 중요하므로 이미지 픽셀이나 RGB에서만 사용함.


package p
type T struct{ a, b int } // a and b are not exported
package q
import “p”
var _ = p.T{a: 1, b: 2} // compile error: can’t reference a, b
var _ = p.T{1, 2} // compile error: can’t reference a, b

type Point struct{ X, Y int }
p := Point{1, 2}
q := Point{2, 1}
fmt.Println(p.X == q.X && p.Y == q.Y) // “false”
fmt.Println(p == q) // “false”

중첩되어 있으면 익명 필드를 사용해서 단축해서 접근할 수 있다.


json

마샬링 : go -> json 데이터구조로 변환
구조체의 그대로가 변환되는데 export 필드만 변환이 된다.

data, err := json.Marshal(movies)
data, err := json.MarshalIndent(movies, “”, ” “)

Year int `json:”released”` # json으로 변환시 released로 변경함.
Color bool `json:”color,omitempty”` # 값이 제로인지 확인해서 제로이면 가지고 오지 않음.

언마샬링 : json -> go 데이터구조로 변환

if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {

디코더는 하나의 라인을 파싱해서 생성함.

탬플릿

중괄호 {} 로 사용하며 action이라 함.
template.New(“report”) 로 생성함.

template.Must(template.New(“issuelist”) 를 이용해서 파싱 오류 여부를 체크할 수 있다.

html insection 공격을 체크해준다.
func main() {
const templ = `<p>A: {{.A}}</p><p>B: {{.B}}</p>`
t := template.Must(template.New(“escape”).Parse(templ))
var data struct {
A string // untrusted plain text
B template.HTML // trusted HTML
}
data.A = “<b>Hello!</b>”
data.B = “<b>Hello!</b>”
if err := t.Execute(os.Stdout, data); err != nil {
log.Fatal(err)
}
}

 

이더리움

 

양자 랜덤 발생기
sha3와 keccak-256 은 표준화 및 변경사항이 발생하면서 혼용해서 사용하는데 keccak-256을 주로 사용한다.
공백값으로 알고리즘을 확인가능하다.

You may also like

이더리움 코어 개발 11/01 요약
이더리움 코어 개발 10.25 요약
[블록체인 코어개발] 08.17 스터디
[퀀트] Making Quant System 2
[블록체인 코어개발] 08.10 스터디
[블록체인 코어개발] 08.03 스터디
[퀀트] Making Quant System 1
[블록체인 코어개발] 07.27 스터디
[블록체인 코어개발] 07.20 스터디
[블록체인 코어개발] 07.13 스터디
[퀀트] Making Quant System 베타 2/2
[블록체인 코어개발] 07.06 스터디

공공장소

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다