dtwzwmv87399
2015-11-15 17:29
浏览 2.2k
已采纳

Golang中*字符串和字符串之间有什么区别?

Aim: understanding the difference between *string and string in Golang


Attempt

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)
}

results in:

Your username is "root".Your username is %!q(*string=0xc820072200)

but when the *string is assigned to a string:

bla:=*username
fmt.Printf("Your username is %q.", bla)

it is able to print the string again:

Your username is "root".Your username is %!q(*string=0xc8200781f0).Your username is "root".

Questions

  1. Why is a *string != string, e.g. display of: "root" vs. %!q(*string=0xc8200781f0)?
  2. In what other cases should a *string be used instead of a string and why?
  3. Why is it possible to assign a *string to a string variable, while the display of the string is different, e.g. display of: "root" vs. %!q(*string=0xc8200781f0)?

图片转代码服务由CSDN问答提供 功能建议

目标:了解 * string 和< Golang中的code> string


尝试

  func  passArguments(){
用户名:= flag.String(“ user”,“ root”,“此服务器的用户名”)
 flag.Parse()
 fmt.Printf(“您的用户名是%q。”,  * username)
 fmt.Printf(“您的用户名是%q。”,用户名)
} 
   
 
 

导致: \ n

 您的用户名是“ root”。您的用户名是%!q(* string = 0xc820072200)
   
 
 

,但是指定了* string 到字符串:

  bla:= *用户名
fmt.Printf(“您的用户名是%q。”,bla)
   \  n 
 

它能够再次打印字符串:

 您的用户名是“ root”。您的用户名是%!q(* string = 0xc8200781f0)。您的 用户名是“ root”。
   
 
 

问题

    \ n
  1. 为什么是* string!=字符串,例如 显示:“ root” vs. %!q(* string = 0xc8200781f0)
  2. 在其他什么情况下,应该使用* string代替字符串,为什么?
  3. 为什么可以在字符串显示不同的情况下将 * string分配给字符串变量,例如 显示以下内容:“ root” vs. %!q(* string = 0xc8200781f0)
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题