programing

구조 분야의 자본

elseif 2023. 3. 25. 10:53

구조 분야의 자본

이 라이브러리를 사용하여 CouchDB(구체적으로는 클라우드) "github.com/mikebell-org/go-couchdb"에 액세스하고 있는데 문제가 발견되었습니다.

데이터베이스에 파일을 추가하고 구조체를 전달하면 대문자로 시작하는 구조체의 필드만 추가됩니다.

예를들면

type Person struct {
    name string
    Age  int
}

func main() {
    db, _ := couchdb.Database(host, database, username, password)
    joe := Person{
        name: "mike",
        Age:  190,
    }
    m, _ := db.PostDocument(joe)
}

이 경우 "age" 필드만 업데이트되어 데이터베이스에 삽입되었습니다.

또 다른 케이스에서도 이 문제를 발견했습니다.이러한 작업을 하고 있을 때:

type Sample struct {
    Name string
    age  int 
}


joe := Sample{
    Name: "xx",
    age:  23,
}

byt, _ := json.Marshal(joe)

post_data := strings.NewReader(string(byt))
fmt.Println(post_data)

이 경우 이름만 출력됩니다.

output : &{{"Name":"xx"} 0 -1}

왜 이러한가?그리고 소문자로 된 필드를 데이터베이스 안에 넣고 싶은데 가능한가요?

이는 대문자로 시작하는 필드만 내보내거나 다른 말로 하면 curent 패키지 외부(및json패키지)를 참조해 주세요.

다음은 이에 관한 사양의 일부입니다.http://golang.org/ref/spec#Exported_identifiers

그러나 "태그"라고 하는 것을 사용하여 대문자로 시작하지 않는 json 필드를 마샬링 해제할 수 있습니다.를 사용하여json사용하는 구문은 다음과 같습니다.

type Sample struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

상세한 것에 대하여는, 메뉴얼을 참조해 주세요.

json package only stringfiy 필드는 대문자로 시작합니다.http://golang.org/pkg/encoding/json/ 를 참조해 주세요.

구조값은 JSON 개체로 인코딩됩니다.아래 중 하나의 이유로 필드를 생략하지 않는 한 내보낸 각 구조 필드는 필드 이름을 개체 키로 사용하여 개체의 멤버가 됩니다.

다음과 같이 구조를 정의해야 합니다.

type Sample struct{
    Name string `json:"name"`
    Age int `json:"age"`
}

json.Marshal 메서드 structure - in field - 대문자로 시작하는 필드만 받아들입니다.

json 패키지는 내보낸 구조 유형 필드(대문자로 시작하는 필드)에만 액세스합니다.따라서 JSON 출력에는 구조물의 내보낸 필드만 표시됩니다.

type Sample struct {
    Name string
    Age  int 
}

언급URL : https://stackoverflow.com/questions/24837432/capitals-in-struct-fields