golang 30

golang tcp socket server

golang 서버 구성시 저 사양 서버 머신에서 10k ~ 15k 동시 접속자 처리도 가능하다.수신 패킷 단편화 처리, 접속 클라이언트 관리, 파일 로그 등등 추가 기능을 포함하면 실무에서도 사용 가능하다.개발툴은 vscode를 사용했다. 프로젝트 디렉터리 구조더보기tcp_socket_server.code-workspaceserver - main.go - client.go - channelGroup.go - go.modclient - main.go - client.go - go.mod tcp_socket_server.code-workspace{ "folders": [ { "path": "./server" }, { "path": "./client" } ], "settings": { "wor..

golang 2024.07.08

golang 메모리 패딩 고려한 구조체 최적화

구조체 메모리 효율적으로 사용하기 위한 주의사항 멤버변수의 메모리의 위치를 할당할 때는 (64비트 운영체제 기준) 8바이트 이하의 크기를 가진 데이터 타입 중에서 가장 큰 크기를 가진 데이터 타입이 기준이 된다. // Testtype Test struct { num1 int8 num2 int32 num3 int8 num4 int64}// mainfunc main() { t := Test{} fmt.Println(unsafe.Sizeof(t)) fmt.Println(&t.num1) fmt.Println(&t.num2) fmt.Println(&t.num3) fmt.Println(&t.num4)} 실행 결과>더보기24 0xc0000ae090 0xc0000ae094 0xc0000ae098 0xc0000ae0a0..

golang 2024.07.05

golang json gojay 라이브러리

서버와 클라이언트 간 연동 시 구조체를 json으로 변환해서 할 경우 gojay 라이브러리의 Marshal 함수를 사용하면 json 생성을 golang에서 제공하는 라이브러리보다 좋은 성능을 낼 수 있다. gojay를 사용할 경우 구조체 별로 MarshalJSONObject 함수 정의가 필요하다. // Package mainpackage main // import "example.com/gojay/main"import ( "bytes" "encoding/json" "fmt" "testing" "github.com/francoispqt/gojay")func Test1(t *testing.T) { a := Address{Text: "a", Post: 1, Enabled: true} c := &Car{Name..

golang 2024.07.05

golang Struct Embedding

golang은 클래스가 없으므로 타 언어의 상속기능을 제공하지 않습니다. 하지만 구조체 임베딩을 사용하면 상속과 비슷한 효과를 낼 수 있습니다. import ( "sync")// 임베딩 미사용type Client struct { ClientMutex sync.Mutex // ...}...client := Client{}client.ClientMutex.Lock()// ...client.ClientMutex.Unlock()// 임베딩 사용type Client struct { sync.Mutex // ...}...client := Client{};client.Lock();// ...client.Unlock() Client 구조체에서 Mutex의 메서드에 직접 접근이 가능합니다.

golang 2024.07.05

golang 정규식 문자열 치환

golang 정규식 사용으로 문자열 치환 하기 텍스트 파일 내부 문자열 치환 file1.txt더보기User.data : ID=#{id}, EMAIL=#{email} Account.data : AID=#{id}, EMAIL=#{email} Member.data : MID=#{id}, EMAIL=#{email} main.go// Package mainpackage main // import "example.com/regex/main"import ( "bufio" "fmt" "os" "regexp" "runtime" "time")// mainfunc main() { f, err := os.Open("file1.txt") if err != nil { fmt.Println(err) return } fs := ..

golang 2024.07.05