Golang 使用小写作为 Struct 属性中的第一个字母

Yus*_*him 4 mysql templates go web

我有 Golang 视图模板的问题,我目前在结构属性中使用小写字母来构建结构,然后将其作为地图传递给视图。

这是我的结构看起来像:

type User struct {
      uid                  int
      username, departname string
}
Run Code Online (Sandbox Code Playgroud)

然后我将结构集合传递给文件视图:

func (App *App) indexHander(w http.ResponseWriter, r *http.Request) {
      rows, err := App.db.Query("SELECT * FROM userinfo")
      checkErr(err)

      t, _ := template.ParseFiles(App.folderpath + "/list.gtpl")

      users := make([]User, 0) // define empty collection of users

      for rows.Next() {
          var uid int 
          var username string
          var departname string
          var created string
          err = rows.Scan(&uid, &username, &departname, &created)
          checkErr(err)
          users = append(users, User{uid, username, departname})

      }   

      t.Execute(w, users)

      defer rows.Close()
  }
Run Code Online (Sandbox Code Playgroud)

这是我的视图 html 代码:

<html>
      <head>
      <title></title>
      </head>
      <body>
          <ul>
          {{ range  . }}
             <li>{{ .username }}</li>
          {{ end }}
          </ul>
      </body>
  </html>
Run Code Online (Sandbox Code Playgroud)

上面的那些代码给了我空的用户数据: 在此处输入图片说明

但是,在 struct 中使用大写第一个字母会给我工作结果:

结构

type User struct {
     Uid                  int
     Username, Departname string  
}
Run Code Online (Sandbox Code Playgroud)

html

<html>
      <head>
      <title></title>
      </head>
      <body>
          <ul>
          {{ range  . }}
             <li>{{ .Username }}</li>
          {{ end }}
          </ul>
      </body>
  </html>
Run Code Online (Sandbox Code Playgroud)

它现在有效

在此处输入图片说明

有人可以向我解释这种行为吗?

小智 7

这里阅读文档

可以导出标识符以允许从另一个包访问它。如果同时满足以下条件,则会导出标识符:

  • 标识符名称的第一个字符是 Unicode 大写字母(Unicode 类“Lu”);
  • 并且标识符在包块中声明或者它是字段名称或方法名称。

不导出所有其他标识符。

  • 在 Go 中,以大写字母开头的标识符从包中导出,并且可以被声明它的包外的任何人访问。如果标识符以小写字母开头,则只能从包内访问它。 (6认同)