当前位置: 首页 > news >正文

沈阳网站开发网站建设的步骤以及流程

沈阳网站开发,网站建设的步骤以及流程,上饶网站开发,常熟市做网站公司我们都知道在golang的模板语法中,我们可以使用template关键字嵌套其他模块, 如: {{template "模板文件名" .}} 然而,这里的 “模板文件名” 是不能使用变量的! 注意这里最后的的 . 这个实际上是templa…

我们都知道在golang的模板语法中,我们可以使用template关键字嵌套其他模块, 如: {{template "模板文件名" .}}  然而,这里的 “模板文件名”  是不能使用变量的!  注意这里最后的的  .   这个实际上是template关键字的第二个参数, 在go的模板里面 它代表的是当前的所有变量数据,即你在执行渲染模板时的第二个data参数,函数原型 func (t *template.Template) Execute(wr io.Writer, data any) error  了解这点很重要!

底层源码分析

golang的template模板解析底层是通过一个叫做 lexer 的对象来实现的。在lexer里面这里的 template 被作为一个关键字, 和其他的 if  else  end, range ,with等一样的关键字。  而这里的模板名在go底层在解析前就被使用Quote解码了, 即 strconv.Quote(模板文件名),所以你在这里输入的任何变量都不会被解析!

go底层代码见源码文件 /src/text/template/parse/node.go 

template这个关键字的第二个参数的处理代码:

func (t *TemplateNode) writeTo(sb *strings.Builder) {sb.WriteString("{{template ")sb.WriteString(strconv.Quote(t.Name))if t.Pipe != nil {sb.WriteByte(' ')t.Pipe.writeTo(sb)}sb.WriteString("}}")
}

lexer模板渲染里面的关键字参考

可以看到这里有我们熟悉的 .   if  else   range with  还有template 这些在golang的模板里面都被用作了关键字

var key = map[string]itemType{".":        itemDot,"block":    itemBlock,"break":    itemBreak,"continue": itemContinue,"define":   itemDefine,"else":     itemElse,"end":      itemEnd,"if":       itemIf,"range":    itemRange,"nil":      itemNil,"template": itemTemplate,"with":     itemWith,
}

lexer模板分隔符解析逻辑和默认分隔符参考

可见对于模板分隔符,如果我们传递的是一个空字符串,则lexer就会使用他自己 定义的常量 {{  }}来作为分隔符

// state functionsconst (leftDelim    = "{{"rightDelim   = "}}"leftComment  = "/*"rightComment = "*/"
)// lex creates a new scanner for the input string.
func lex(name, input, left, right string) *lexer {if left == "" {left = leftDelim}if right == "" {right = rightDelim}l := &lexer{name:         name,input:        input,leftDelim:    left,rightDelim:   right,line:         1,startLine:    1,insideAction: false,}return l
}

总结:

在go的模板里面,实际上他所有的关键字最终编译器层面基本上都是以函数的方式运行的。  这里的template关键字 的第二个参数在递交编译器之前被 Quote 了一把, 所以这里任何的变量都不会被解析,从而导致了template模板嵌套语法 不能使用任何的变量! 

http://www.yayakq.cn/news/222528/

相关文章:

  • 涉县专业做网站网站502错误什么原因
  • php中英文企业网站东莞seo快速排名
  • 网站制作合同书厦门网站制作策划
  • 房价查询官网网站关键词seo优化怎么做
  • 嵊州建设银行取款网站如何做网站优惠券推广
  • 无锡软件网站开发公司wordpress博客导出
  • 中国建设银行企业信息门户网站建设网站有什么法律么
  • 北京微网站建设建设公司网站需要注意哪些
  • 辽宁城乡建设部网站专门做家居的网站
  • 电商网站 appwordpress图像存储
  • 长春网站建设产品展示长沙自动化网站建设
  • 网站开发设计合同范本自己开个公司做网站
  • 深圳网站建设一般多少钱顺德大良那里做网站好
  • 苏州实力做网站公司有哪些网站开发制作的流程是什么
  • 1688货源网手机版seo职位信息
  • 二级域名做网站南昌百度推广联系方式
  • 门户网站建设与开发快速让百度收录网站
  • 铁道部售票网站多少钱建设国内十大4a广告公司
  • 公司网站建设优点wordpress建商城
  • 九江建网站多少钱wordpress 2m带宽 支持多少人
  • 安徽省建设厅网站电话微信社群运营主要是做什么的
  • 广州网站建设支付1920网页设计尺寸规范
  • 做网站心得国外做内容网站
  • 青岛正规网站设计公司尚普咨询市场调研公司
  • 效果好的网站建济南营销网站建设
  • 如何做汽车的创意视频网站会计网站模板
  • 南京网站设计ui百度app下载安装普通下载
  • 中国网站的特点适合网站开发的框架
  • 揭阳制作公司网站wordpress 父级页面
  • 做交互的设计网站成品播放器