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

问题描述 投票:0回答:1

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

这是我的结构看起来像:

type User struct {
      uid                  int
      username, departname string
}

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

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

这是我的视图HTML代码:

<html>
      <head>
      <title></title>
      </head>
      <body>
          <ul>
          {{ range  . }}
             <li>{{ .username }}</li>
          {{ end }}
          </ul>
      </body>
  </html>

上面的代码给了我空的用户数据:enter image description here

但是,使用大写首字母ini struct给我的工作结果:

结构

type User struct {
     Uid                  int
     Username, Departname string  
}

HTML

<html>
      <head>
      <title></title>
      </head>
      <body>
          <ul>
          {{ range  . }}
             <li>{{ .Username }}</li>
          {{ end }}
          </ul>
      </body>
  </html>

它现在有效

enter image description here

有人能解释一下这种行为吗?

mysql templates web go
1个回答
3
投票

阅读文档here

可以导出标识符以允许从另一个包访问它。如果两者都导出标识符:

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

不导出所有其他标识符。

© www.soinside.com 2019 - 2024. All rights reserved.