반응형
인터페이스 {}에서 []바이트 변환(골랑)
인터페이스 타입의 데이터를 마킹 해제하려고 합니다.그래서 인터페이스 타입을[]byte
그걸 언마샬에게 넘겨주죠나는 노력했다.
err := json.Unmarshal([]byte(kpi), &a)
=> 실패- 인터페이스를 변환하다
[]byte
사용.
kpidata, res := kpi.([]byte)
=> 실패,kpidata
이nil
그럼 변환할 방법이 있을까요?
예: https://play.golang.org/p/5pqQ0DQ94Dp
샘플 코드data
JSON 부호화(간단한 단어 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
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
반응형
'programing' 카테고리의 다른 글
"NoClassDefFoundError: 클래스를 초기화할 수 없습니다" 오류 (0) | 2023.03.17 |
---|---|
SQL Server의 IsNull() 함수와 동등한 Oracle은 무엇입니까? (0) | 2023.03.17 |
기본 인증을 위한 올바른 인증 헤더를 보내는 방법 (0) | 2023.03.17 |
Wordpress에서 다른 관리 페이지로 리디렉션하는 방법 (0) | 2023.03.17 |
JSON simplejson을 사용한 장고 모델 시리얼화 (0) | 2023.03.17 |