interface {}를 문자열로 변환하는 방법은 무엇입니까?
docopt 를 사용하여 명령 줄 인수를 구문 분석하고 있습니다. 이것은 작동하며 다음과 같은 맵이 생성됩니다.
map[<host>:www.google.de <port>:80 --help:false --version:false]
이제 두 값 사이에 콜론이있는 문자열에 값 host
과 port
값 을 연결하고 싶습니다 . 기본적으로 다음과 같은 것입니다.
host := arguments["<host>"] + ":" + arguments["<port>"]
불행히도 오류 메시지가 표시되므로 작동하지 않습니다.
잘못된 작업 : arguments [ ""] + ":"(일치하지 않는 유형 인터페이스 {} 및 문자열)
그래서 분명히 맵에서 얻은 값 (단지 interface{}
이므로 무엇이든 될 수 있음)을 문자열로 변환해야합니다. 이제 내 질문은 어떻게해야합니까?
유형 어설 션 을 추가해야합니다 .(string)
. 지도가 다음 유형이기 때문에 필요합니다 map[string]interface{}
.
host := arguments["<host>"].(string) + ":" + arguments["<port>"].(string)
최신 버전의 Docopt는 변환 메서드 가있는 Opts 개체를 반환 합니다 .
host, err := arguments.String("<host>")
port, err := arguments.String("<port>")
host_port := host + ":" + port
유형 어설 션을 사용할 필요가 없습니다. 대신 다음 %v
과 함께 형식 지정자를 사용하십시오 Sprintf
.
hostAndPort := fmt.Sprintf("%v:%v", arguments["<host>"], arguments["<port>"])
Peter가 말한 내용을 확장하려면 : interface {}에서 문자열로 이동하려고하므로 여러 수신 유형을 고려해야하므로 유형 어설 션은 골치 아픈 일이 될 것입니다. 가능한 각 유형을 주장하고 사용하기 전에 해당 유형인지 확인해야합니다.
fmt.Sprintf ( https://golang.org/pkg/fmt/#Sprintf )를 사용 하면 인터페이스 변환이 자동으로 처리됩니다. 원하는 출력 유형이 항상 문자열임을 알고 있으므로 Sprintf는 사용자를 대신하여 추가 코드없이 인터페이스 뒤에있는 모든 유형을 처리합니다.
이제 인터페이스를 모든 데이터 유형으로 변환하기위한 패키지를 만들었습니다. github 링크 및 godoc 링크 https://github.com/mufti1/interconv
godoc 링크 https://godoc.org/github.com/mufti1/interconv/package
godoc에서 가져온 다음 함수를 호출합니다.
참고 URL : https://stackoverflow.com/questions/27137521/how-to-convert-interface-to-string
'developer tip' 카테고리의 다른 글
Clojure에서 목록 유형간에 쉽게 변환 할 수있는 방법이 있습니까? (0) | 2020.09.11 |
---|---|
Android에서 맞춤형 키보드를 어떻게 만들 수 있습니까? (0) | 2020.09.11 |
C 포인터를 NULL로 초기화 할 수 있습니까? (0) | 2020.09.11 |
XSD 파일의 목적은 무엇입니까? (0) | 2020.09.11 |
Ruby on Rails Database.yml 파일의 MySQL 구성 수정 (0) | 2020.09.11 |