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

时间:2017-05-01 08:59:20

标签: mysql templates web go

我对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>

上面的代码给了我空用户数据: https://jsfiddle.net/kkv687yv/2/

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

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

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

1 个答案:

答案 0 :(得分:3)

阅读文档here

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

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

不会导出所有其他标识符。