'Programming/golang'에 해당되는 글 103건

  1. 2023.05.11 go 포맷터
  2. 2023.05.08 golang echo directory listing
  3. 2023.03.28 golang websocket binary
  4. 2023.02.03 golang 크로스 컴파일 GOARM GOARCH
  5. 2023.01.13 golang map 에 데이터 추가하기
  6. 2023.01.03 golang reflect
  7. 2023.01.03 golang unsafe
  8. 2023.01.03 golang 웹 pprof
  9. 2022.11.22 golang shared memory 모듈
  10. 2022.10.07 golang net.TCPConn
Programming/golang2023. 5. 11. 11:56

go 에는 자체적으로 포맷터가 들어있다.

획일화 되서 나쁘다고 해야하나.. 좋다고 해야하나.. 참 미묘~

 

To format your code, you can use the gofmt tool directly:

gofmt -w yourcode.go
Or you can use the “go fmt” command:

go fmt path/to/your/package

[링크 : https://go.dev/blog/gofmt]

'Programming > golang' 카테고리의 다른 글

golang uds  (0) 2023.05.16
golang mutex (sync)  (0) 2023.05.16
golang echo directory listing  (0) 2023.05.08
golang websocket binary  (0) 2023.03.28
golang 크로스 컴파일 GOARM GOARCH  (0) 2023.02.03
Posted by 구차니
Programming/golang2023. 5. 8. 10:30

e.Static은 아래와 같이 접근 경로, 디렉토리(상대경로)로 설정되며

index.html은 연결되어도 디렉토리에 대해서 리스팅을 해주지 않는데

e := echo.New()
e.Static("/static", "assets")

 

e.Use에 middleware를 사용하고 Browse:true를 넣어주면

apache에서 처럼 index.html이 없는 디렉토리에서 목록을 리스팅해준다.

Root 는 static과 같이 입력하면 실행으로 부터 상대경로로, /static과 같이 입력하면 절대경로로 작동한다.

 

e := echo.New()
e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
  Root:   "static",
  Browse: true,
}))

[링크 : https://stackoverflow.com/questions/45558773/serving-files-with-echo]

[링크 : https://echo.labstack.com/middleware/static/]

 

테스트 디렉토리에 아래와 같이 파일을 생성하고

# cd test
# ls -al
total 32
drwxr-xr-x    2 root     root         16384 May  8 10:52 .
drwxr-xr-x    6 root     root         16384 May  8 10:52 ..
-rwxr-xr-x    1 root     root             0 May  8 10:52 1.log
-rwxr-xr-x    1 root     root             0 May  8 10:52 2.log

 

localhost/test 로 접속하면 이쁘진 않은데 아래와 같이 목록이 출력된다.

'Programming > golang' 카테고리의 다른 글

golang mutex (sync)  (0) 2023.05.16
go 포맷터  (0) 2023.05.11
golang websocket binary  (0) 2023.03.28
golang 크로스 컴파일 GOARM GOARCH  (0) 2023.02.03
golang map 에 데이터 추가하기  (0) 2023.01.13
Posted by 구차니
Programming/golang2023. 3. 28. 10:36

웹소켓을 통해 데이터를 JSON으로 변환해서 보내니 웹서버에 부하가 걸리는 것 같아서

binary 데이터 그대로~ 보내고 웹에서 binary를 처리하도록 하려고 찾아보는 중

 

서버 사이드(golang)

for {
    messageType, p, err := conn.ReadMessage()
    if err != nil {
        log.Println(err)
        return
    }
    if err := conn.WriteMessage(messageType, p); err != nil {
        log.Println(err)
        return
    }
}
In above snippet of code, p is a []byte and messageType is an int with value websocket.BinaryMessage or websocket.TextMessage.

[링크 : https://pkg.go.dev/github.com/gorilla/websocket#section-readme]

[링크 : https://kiwitrip.tistory.com/5]

 

클라이언트 사이드(웹 브라우저)

webSocket.onmessage = function (message) {
    var blob = message.data;
    var fileReader = new FileReader();
    fileReader.onload = function (event) {
        var arrayBuffer = event.target.result;
        var dataview = new DataView(arrayBuffer);
        var answer = dataview.getFloat64(0);
        alert("Server> : " + answer);
    };
    fileReader.readAsArrayBuffer(blob);
};

[링크 : http://www.gisdeveloper.co.kr/?p=5594]

 

+

23.04.04

var wsHost = "http://my-sites-url.com/path/to/echo-web-socket-handler";
var ws = new WebSocket(wsHost);
var buffer = new ArrayBuffer(5); // 5 byte buffer
var bufferView = new DataView(buffer);

bufferView.setFloat32(0, Math.PI);
bufferView.setUint8(4, 127);

ws.binaryType = 'arraybuffer';

ws.onmessage = function(message) {
    var view = new DataView(message.data);
    console.log('Uint8:', view.getUint8(4), 'Float32:', view.getFloat32(0))
};

ws.onopen = function() {
    ws.send(buffer);
};

[링크 : https://riptutorial.com/javascript/example/6661/working-with-binary-messages]

'Programming > golang' 카테고리의 다른 글

go 포맷터  (0) 2023.05.11
golang echo directory listing  (0) 2023.05.08
golang 크로스 컴파일 GOARM GOARCH  (0) 2023.02.03
golang map 에 데이터 추가하기  (0) 2023.01.13
golang reflect  (0) 2023.01.03
Posted by 구차니
Programming/golang2023. 2. 3. 12:12

이전에 찾을때는 GOARCH=arm을 넣어주면 자동으로 되니 그러려니 하고 썼는데

혹시나 해서 objump로 디스어셈블 해서 보니 vmul 이 하나도 안나온다.

그래서 GOARM=7 GOARCH=arm 을 주고 하니 vmul이 쭈르륵 나온다.

아마도.. GOARCH=arm 하면 호환성(?) 옵션으로 인해 GOARM=5로 잡히는게 아닐까 의심이 된다.

 

Supported architectures

Go supports the following ARM architectural families.

ArchitectureStatusGOARM valueGOARCH value

ARMv4 and below sorry, not supported n/a n/a
ARMv5 supported GOARM=5 GOARCH=arm
ARMv6 supported GOARM=6 GOARCH=arm
ARMv7 supported GOARM=7 GOARCH=arm
ARMv8 supported n/a GOARCH=arm64

Starting from Go 1.1, the appropriate GOARM value will be chosen if you compile the program from source on the target machine. In cross compilation situations, it is recommended that you always set an appropriate GOARM value along with GOARCH.

[링크 : https://docs.huihoo.com/go/golang.org/wiki/GoArm.html]

[링크 : https://gist.github.com/amitsaha/ec8fbbc01e22ef9cc020570f415fa2fb]

'Programming > golang' 카테고리의 다른 글

golang echo directory listing  (0) 2023.05.08
golang websocket binary  (0) 2023.03.28
golang map 에 데이터 추가하기  (0) 2023.01.13
golang reflect  (0) 2023.01.03
golang unsafe  (0) 2023.01.03
Posted by 구차니
Programming/golang2023. 1. 13. 21:00

동적 길이를 지니는 map은 없나?

 

package main

import (
    "fmt"

    "github.com/mitchellh/mapstructure"
)

type MyStruct struct {
    Name string `mapstructure:"name"`
    Age  int64  `mapstructure:"age"`
}

func main() {
    myData := make(map[string]interface{})
    myData["Name"] = "Wookiist"
    myData["Age"] = int64(27)

    result := &MyStruct{}
    if err := mapstructure.Decode(myData, &result); err != nil {
        fmt.Println(err)
    }
    fmt.Println(result)
}

[링크 : https://wookiist.dev/107]

 

걍 추가하면 되는 듯?

package main

import "fmt"

func main() {
// employee 라는 map 타입의 자료가 있습니다.
var employee = map[string]int{
"Mark":  10,
"Sandy": 20,
"Rocky": 30,
"Rajiv": 40,
"Kate":  50,
}

// employee map 타입의 자료를 iterate하는 방법은
// for range 문구를 사용하는 겁니다.
// key, element 를 지정하면 해당 key와 value를
// 각각 key, element라는 변수로 액세스할 수 있습니다.
for key, element := range employee {
fmt.Println("Key:", key, "=>", "Element:", element)
}

// employee map 타입에 자료를 추가해 봅시다.
employee["Lunar"] = 60
employee["Mars"] = 70

// employee map 타입의 자료중 기존 자료 업데이트하기
employee["Mark"] = 15

// 수정 된 후 출력하기
fmt.Println("after modified")
for key, element := range employee {
fmt.Println("Key:", key, "=>", "Element:", element)
}

// Map data 삭제하기 - delete 함수 이용
delete(employee,"Mark")

// 수정 된 후 출력하기
fmt.Println("after modified")
for key, element := range employee {
fmt.Println("Key:", key, "=>", "Element:", element)
}

// 빈 Map 타입 생성
employeeList := make(map[string]int)

// Map 자료의 갯수는 len함수로 쉽게 구할 수 있습니다.
fmt.Println(len(employee))     // 2
fmt.Println(len(employeeList)) // 0
}

[링크 : https://cpro95.tistory.com/155]

'Programming > golang' 카테고리의 다른 글

golang websocket binary  (0) 2023.03.28
golang 크로스 컴파일 GOARM GOARCH  (0) 2023.02.03
golang reflect  (0) 2023.01.03
golang unsafe  (0) 2023.01.03
golang 웹 pprof  (0) 2023.01.03
Posted by 구차니
Programming/golang2023. 1. 3. 19:05

먼가 여기저기서 나오는데 정체를 모르겠다.

 

[링크 : https://pkg.go.dev/reflect]

 

copy 말고 Copy인데.. copy는 그럼 누구꺼지?

[링크 : https://pkg.go.dev/reflect#Copy]

 

빌트인 패키지라는데 primitive로 봐도 되려나?

[링크 : https://golangbyexample.com/copy-function-in-golang/]

'Programming > golang' 카테고리의 다른 글

golang 크로스 컴파일 GOARM GOARCH  (0) 2023.02.03
golang map 에 데이터 추가하기  (0) 2023.01.13
golang unsafe  (0) 2023.01.03
golang 웹 pprof  (0) 2023.01.03
golang shared memory 모듈  (0) 2022.11.22
Posted by 구차니
Programming/golang2023. 1. 3. 19:03

멀 하던 성능을 위해서는 unsafe를 쓸 수 밖에 없나?

shared memory의 내용을 Binary Reader를 통해 읽으니 이상하리 만치 너~~~무 느리다.

 

[링크 : https://hackernoon.com/golang-unsafe-type-conversions-and-memory-access-odz3yrl]

'Programming > golang' 카테고리의 다른 글

golang map 에 데이터 추가하기  (0) 2023.01.13
golang reflect  (0) 2023.01.03
golang 웹 pprof  (0) 2023.01.03
golang shared memory 모듈  (0) 2022.11.22
golang net.TCPConn  (0) 2022.10.07
Posted by 구차니
Programming/golang2023. 1. 3. 15:21

0.0.0.0:6060 으로 하면 외부에서도 접근 가능하게 설정이 가능하다.

근데 멀 눌러야 사용율이 잘 나올까...

 

import _ "net/http/pprof"

go func() {
    log.Println(http.ListenAndServe("localhost:6060", nil))
}()

[링크 : https://coralogix.com/blog/optimizing-a-golang-service-to-reduce-over-40-cpu/]

[링크 : https://pkg.go.dev/net/http/pprof]

'Programming > golang' 카테고리의 다른 글

golang reflect  (0) 2023.01.03
golang unsafe  (0) 2023.01.03
golang shared memory 모듈  (0) 2022.11.22
golang net.TCPConn  (0) 2022.10.07
golang 변수 타입 알아내기  (0) 2022.10.05
Posted by 구차니
Programming/golang2022. 11. 22. 18:11

'Programming > golang' 카테고리의 다른 글

golang unsafe  (0) 2023.01.03
golang 웹 pprof  (0) 2023.01.03
golang net.TCPConn  (0) 2022.10.07
golang 변수 타입 알아내기  (0) 2022.10.05
cgo  (0) 2022.10.04
Posted by 구차니
Programming/golang2022. 10. 7. 18:00

net.Listen() 으로 받은것을

sock.Accept()로 받아 어떤 FD에 저장이 되어서 처리되고 있나를 보고 싶은데

(왜 굳이 이게 필요한 진 묻지 말자. 걍 보고 싶었음)

 

아래와 같이 8000번 열고 nc localhost 8000 하면 접속이 가능하다.

그나저나 conn.File()은 없는 메소드라 나오고

conn.(*net.TCPConn).File()은 되는데 타입 캐스팅인가? 도대체 무슨 문법이지?

tcp_sock, err := net.Listen("tcp", ":8000")
if err != nil {
        fmt.Println(err)
}

for {
        conn, err := tcp_sock.Accept()
        if err != nil {
                fmt.Println(err)
                continue
        }
        fmt.Println(conn)
        fd, err := conn.(*net.TCPConn).File()
        if err != nil {
                fmt.Println(fd.Fd())
        }
        fmt.Println(reflect.TypeOf(conn))
        fmt.Println(conn.LocalAddr())
        fmt.Println(conn.RemoteAddr())
}
fmt.Println("done")
&{{0xc0000a0180}}
*net.TCPConn
127.0.0.1:8000
127.0.0.1:37690

위와 같이 출력된다. 왜 그러나 했더니 포인터 형태로 리턴되는건데, 이걸 출력하려면 unsafe를 써야 하는건가..

 

[링크 : https://pkg.go.dev/net#TCPConn.File]

[링크 : https://pkg.go.dev/os#File.Fd]

[링크 : https://pkg.go.dev/builtin#uintptr]

 

+

[링크 : https://pkg.go.dev/net#Conn]

 

Type assertions

[링크 : https://go.dev/tour/methods/15]

'Programming > golang' 카테고리의 다른 글

golang 웹 pprof  (0) 2023.01.03
golang shared memory 모듈  (0) 2022.11.22
golang 변수 타입 알아내기  (0) 2022.10.05
cgo  (0) 2022.10.04
golang unsafe package  (0) 2022.10.01
Posted by 구차니