Saya menggunakan docopt untuk mengurai argumen baris perintah. Ini berfungsi, dan itu menghasilkan peta, seperti
map[<host>:www.google.de <port>:80 --help:false --version:false]
Sekarang saya ingin menggabungkan nilai host
dan port
ke string dengan titik dua di antara dua nilai. Pada dasarnya, sesuatu seperti:
host := arguments["<host>"] + ":" + arguments["<port>"]
Sayangnya, ini tidak berhasil, karena saya mendapatkan pesan kesalahan:
operasi tidak valid: argumen [""] + ":" (jenis antarmuka {} dan string tidak cocok)
Jadi jelas saya perlu mengubah nilai yang saya dapatkan dari peta (yang mana saja interface{}
, jadi bisa apa saja) menjadi string. Sekarang pertanyaan saya adalah, bagaimana cara melakukannya?
Jawaban:
Anda perlu menambahkan pernyataan tipe
.(string)
. Ini diperlukan karena peta berjenismap[string]interface{}
:Versi terbaru Docopt mengembalikan objek Opts yang memiliki metode untuk konversi:
sumber
Anda tidak perlu menggunakan pernyataan tipe, cukup gunakan
%v
penentu format denganSprintf
:sumber
Untuk memperluas apa yang dikatakan Peter: Karena Anda ingin beralih dari antarmuka {} ke string, pernyataan tipe akan menyebabkan sakit kepala karena Anda perlu memperhitungkan beberapa tipe yang masuk. Anda harus menegaskan setiap jenis mungkin dan memverifikasi itu adalah jenis itu sebelum menggunakannya.
Menggunakan fmt.Sprintf ( https://golang.org/pkg/fmt/#Sprintf ) secara otomatis menangani konversi antarmuka. Karena Anda tahu jenis keluaran yang Anda inginkan selalu berupa string, Sprintf akan menangani jenis apa pun yang ada di belakang antarmuka tanpa banyak kode tambahan atas nama Anda.
sumber