Цель: понимание разницы между *string
и string
в GolangВ чем разница между строкой * и строкой в Golang?
ПОПЫТКА
func passArguments() {
username := flag.String("user", "root", "Username for this server")
flag.Parse()
fmt.Printf("Your username is %q.", *username)
fmt.Printf("Your username is %q.", username)
}
приводит:
Your username is "root".Your username is %!q(*string=0xc820072200)
но когда * строка присвоенные стри нг:
bla:=*username
fmt.Printf("Your username is %q.", bla)
он может напечатать строку еще раз:
Your username is "root".Your username is %!q(*string=0xc8200781f0).Your username is "root".
Вопросы
- Почему это * строка = строка, например! отображение:
"root"
против%!q(*string=0xc8200781f0)
? - В каких других случаях должна использоваться строка * вместо строки и почему?
- Почему можно назначить строку * строковой переменной, в то время как отображение строки отличается, например. отображение:
"root"
против%!q(*string=0xc8200781f0)
?
Переменные, обозначенные символом *, являются указателями или адресом в памяти (считайте его почтовым адресом, где переменная является домом). Подробнее см. Https://tour.golang.org/moretypes/1. – ti7