programing

인터페이스 {}에서 []바이트 변환(골랑)

muds 2023. 3. 17. 22:03
반응형

인터페이스 {}에서 []바이트 변환(골랑)

인터페이스 타입의 데이터를 마킹 해제하려고 합니다.그래서 인터페이스 타입을[]byte그걸 언마샬에게 넘겨주죠나는 노력했다.

  1. err := json.Unmarshal([]byte(kpi), &a)=> 실패
  2. 인터페이스를 변환하다[]byte사용.
    kpidata, res := kpi.([]byte)=> 실패,kpidatanil

그럼 변환할 방법이 있을까요?

예: https://play.golang.org/p/5pqQ0DQ94Dp

샘플 코드dataJSON 부호화(간단한 단어 String)를 사용하여Unmarshal잘못된 방법으로:

// Unmarshal parses the JSON-encoded data and stores the result
// in the value pointed to by v. If v is nil or not a pointer,
// Unmarshal returns an InvalidUnmarshalError.
func Unmarshal(data []byte, v interface{}) error

The Go Playground에서 시험해 보세요.

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    // ********************* Marshal *********************
    u := map[string]interface{}{}
    u["name"] = "kish"
    u["age"] = 28
    u["work"] = "engine"
    //u["hobbies"] = []string{"art", "football"}
    u["hobbies"] = "art"

    b, err := json.Marshal(u)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(b))

    // ********************* Unmarshal *********************
    var a interface{}
    err = json.Unmarshal(b, &a)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Println(a)
}

출력:

{"age":28,"hobbies":"art","name":"kish","work":"engine"}
map[name:kish work:engine age:28 hobbies:art]

이것을 언마셜 하는 경우는, 다음의 간단한 작업 예를 시험해 주세요([]byte(kpi.(string))):

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    var kpi interface{} = st
    var a []Animal
    err := json.Unmarshal([]byte(kpi.(string)), &a)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Println(a)
}

type Animal struct {
    Name  string
    Order string
}

var st = `[
    {"Name": "Platypus", "Order": "Monotremata"},
    {"Name": "Quoll",    "Order": "Dasyuromorphia"}
]`

출력:

[{Platypus Monotremata} {Quoll Dasyuromorphia}]

(을 사용한 작업 예)[]byte(*kpi.(*string))):

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    var kpi interface{} = &st
    var a []Animal
    err := json.Unmarshal([]byte(*kpi.(*string)), &a)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Println(a)
}

type Animal struct {
    Name  string
    Order string
}

var st = `[
    {"Name": "Platypus", "Order": "Monotremata"},
    {"Name": "Quoll",    "Order": "Dasyuromorphia"}
]`

보안:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    u := map[string]interface{}{}
    u["1"] = "one"
    b, err := json.Marshal(u)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(b))
}

출력:

{"1":"one"}

이게 도움이 됐으면 좋겠어요.

Kugel이 제공한 예에 기초한 작업 예:

package main

import (
    "fmt"
)

func passInterface(v interface{}) {
    b, ok := v.(*[]byte)
    fmt.Println(ok)
    fmt.Println(b)
}

func main() {
    passInterface(&[]byte{0x00, 0x01, 0x02})
}

놀고

참조를 건네주지 않으면 기본적으로 동일하게 동작합니다.

놀고

언급URL : https://stackoverflow.com/questions/49006594/interface-to-byte-conversion-in-golang

반응형