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

  1. 2023.02.03 golang 크로스 컴파일 GOARM GOARCH
  2. 2023.01.13 golang map 에 데이터 추가하기
  3. 2023.01.03 golang reflect
  4. 2023.01.03 golang unsafe
  5. 2023.01.03 golang 웹 pprof
  6. 2022.11.22 golang shared memory 모듈
  7. 2022.10.07 golang net.TCPConn
  8. 2022.10.05 golang 변수 타입 알아내기
  9. 2022.10.04 cgo
  10. 2022.10.01 golang unsafe package
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 구차니
Programming/golang2022. 10. 5. 23:44

 refelct 패키지의 reflect.TypeOf()를 통해 :=로 할당된 객체의 타입을 알아낼 수 있다.

package main

import (
    "fmt"
    "reflect"
)

func main() {

    tst := "string"
    tst2 := 10
    tst3 := 1.2

    fmt.Println(reflect.TypeOf(tst))
    fmt.Println(reflect.TypeOf(tst2))
    fmt.Println(reflect.TypeOf(tst3))

}
Hello, playground
string
int
float64

[링크 : https://stackoverflow.com/questions/20170275/how-to-find-the-type-of-an-object-in-go]

 

func TypeOf(i any) Type
TypeOf returns the reflection Type that represents the dynamic type of i. If i is a nil interface value, TypeOf returns nil.

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

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

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

golang shared memory 모듈  (0) 2022.11.22
golang net.TCPConn  (0) 2022.10.07
cgo  (0) 2022.10.04
golang unsafe package  (0) 2022.10.01
golang 의 장단점. 개인적인 생각  (2) 2022.09.28
Posted by 구차니
Programming/golang2022. 10. 4. 19:00

cgo

그나저나 얘 쓰면.. 크로스컴파일은 알아서 찾아서 하나?

 

포인트는 import "C"

그리고 C.함수명

package main

// typedef int (*intFunc) ();
//
// int
// bridge_int_func(intFunc f)
// {
// return f();
// }
//
// int fortytwo()
// {
//     return 42;
// }
import "C"
import "fmt"

func main() {
f := C.intFunc(C.fortytwo)
fmt.Println(int(C.bridge_int_func(f)))
// Output: 42
}

[링크 : https://pkg.go.dev/cmd/cgo]

[링크 : https://linsoo.pe.kr/archives/26740]

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

golang net.TCPConn  (0) 2022.10.07
golang 변수 타입 알아내기  (0) 2022.10.05
golang unsafe package  (0) 2022.10.01
golang 의 장단점. 개인적인 생각  (2) 2022.09.28
golang json/encoding marshal() unmarshal()  (0) 2022.09.28
Posted by 구차니
Programming/golang2022. 10. 1. 16:23

golang에 포인터는 지원하는데 산술연산자를 지원하지 않기에

unsafe가 필수인데.. 그렇다면.. golang은 포인터를 지원한다고 할 수 있는게 맞...나?

 

[링크 : https://stackoverflow.com/questions/32700999/pointer-arithmetic-in-go]

[링크 : https://medium.com/a-journey-with-go/go-what-is-the-unsafe-package-d2443da36350]

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

 

 

 

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

golang 변수 타입 알아내기  (0) 2022.10.05
cgo  (0) 2022.10.04
golang 의 장단점. 개인적인 생각  (2) 2022.09.28
golang json/encoding marshal() unmarshal()  (0) 2022.09.28
golang mac address 얻기  (0) 2022.09.28
Posted by 구차니