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

右翼网站网站项目开发流程有哪七步

右翼网站,网站项目开发流程有哪七步,dw网页制作教程div,深圳学校网站定制设计Go内建函数源码#xff0c;我好像在哪里见过你。 - 佚名1. 何为Go内建函数众所周知#xff0c;Go是最简单的主流编程语言之一#xff0c;截至Go 1.15版本#xff0c;Go语言的关键字的规模依旧保持在25个#xff1a;很多刚入门的gopher可能会问#xff1a;像bool、byte、e…Go内建函数源码我好像在哪里见过你。 - 佚名1. 何为Go内建函数众所周知Go是最简单的主流编程语言之一截至Go 1.15版本Go语言的关键字的规模依旧保持在25个很多刚入门的gopher可能会问像bool、byte、error、true、iota甚至int都难道都不是关键字没错和其他语言不同这些标识符并不是关键字在Go中它们被称为预定义标识符。这些标识符拥有universe block作用域(关于go代码块作用域的详细解析可参考我的技术专栏“改善Go语⾔编程质量的50个有效实践”)可以在任何源码位置使用。从上图我们看到所谓的Go内建函数也包含在这个预定义标识符集合中只是这些标识符被用作函数名称标识符罢了。2. 预定义标识符可被overrideGo语言的关键字是保留的我们无法将其用于规范之外的其他场合比如作为变量的标识符。但是预定义标识符不是关键字我们可以override它们。下面就是一个对默认表示整型类型的预定义标识符int进行override的例子package mainimport (fmtunsafe )type int int8func main() {var a int 5fmt.Printf(%Tn, a) // main.int而不是intfmt.Println(unsafe.Sizeof(a)) // 1而不是8 } 在上述这个源文件中预定义标识符int被override为一个自定义类型int该类型的underlying type为int8于是当我们输出该类型变量(代码中的变量a)的类型和长度时我们得到的是http://main.int和1而不是int和8。3. 预定义标识符的声明源码在哪里Go是开源的编程语言这些预定义标识符想必也都有自己的“归宿”吧的确是这样的。Go的每个发行版都带有一份源码而预定义标识符就在这份源码中。以Go 1.14为例我们可以在下面路径中找到预定义标识符的源码$GOROOT/src/builtin/builtin.go 以string、int、uint这几个代表原生类型的预定义标识符为例它们的声明代码如下// $GOROOT/src/builtin/builtin.go// string is the set of all strings of 8-bit bytes, conventionally but not // necessarily representing UTF-8-encoded text. A string may be empty, but // not nil. Values of string type are immutable. type string string// int is a signed integer type that is at least 32 bits in size. It is a // distinct type, however, and not an alias for, say, int32. type int int// uint is an unsigned integer type that is at least 32 bits in size. It is a // distinct type, however, and not an alias for, say, uint32. type uint uint 同时我们利用go doc builtin.int也可以查看预定义标识符int的文档$go doc builtin.int package builtin // import builtintype int intint is a signed integer type that is at least 32 bits in size. It is adistinct type, however, and not an alias for, say, int32.func cap(v Type) int func copy(dst, src []Type) int func len(v Type) int 4. 内建函数的源码在哪里作为预声明标识符子集的内建函数们在builtin.go中也都有自己的位置比如以append这个内建函数为例我们可以在Go安装包的builtin.go中找到它的原型(Go 1.14)// The append built-in function appends elements to the end of a slice. If // it has sufficient capacity, the destination is resliced to accommodate the // new elements. If it does not, a new underlying array will be allocated. // Append returns the updated slice. It is therefore necessary to store the // result of append, often in the variable holding the slice itself: // slice append(slice, elem1, elem2) // slice append(slice, anotherSlice...) // As a special case, it is legal to append a string to a byte slice, like this: // slice append([]byte(hello ), world...) func append(slice []Type, elems ...Type) []Type 但我们惊奇的发现这里没有append函数的实现。那么append内建函数实现的源码究竟在哪里呢本质上讲append函数包括其他内建函数其实并没有自己的实现源码。内建函数仅仅是一个标识符在Go源码编译期间Go编译器遇到内建函数标识符时会将其替换为若干runtime的调用我们还以append函数为例我们输出下面代码的汇编代码(Go 1.14)// append.go package mainimport fmtfunc main() {var s []int{5, 6}s append(s, 7, 8)fmt.Println(s) }$go tool compile -S append.go append.s 汇编节选如下(append.s).main STEXT size277 args0x0 locals0x580x0000 00000 (xxx.go:5) TEXT .main(SB), ABIInternal, $88-00x0000 00000 (xxx.go:5) MOVQ (TLS), CX0x0009 00009 (xxx.go:5) CMPQ SP, 16(CX)0x000d 00013 (xxx.go:5) PCDATA $0, $-20x000d 00013 (xxx.go:5) JLS 2670x0013 00019 (xxx.go:5) PCDATA $0, $-10x0013 00019 (xxx.go:5) SUBQ $88, SP0x0017 00023 (xxx.go:5) MOVQ BP, 80(SP)0x001c 00028 (xxx.go:5) LEAQ 80(SP), BP0x0021 00033 (xxx.go:5) PCDATA $0, $-20x0021 00033 (xxx.go:5) PCDATA $1, $-20x0021 00033 (xxx.go:5) FUNCDATA $0, gclocals·69c1753bd5f81501d95132d08af04464(SB)0x0021 00033 (xxx.go:5) FUNCDATA $1, gclocals·568470801006e5c0dc3947ea998fe279(SB)0x0021 00033 (xxx.go:5) FUNCDATA $2, gclocals·bfec7e55b3f043d1941c093912808913(SB)0x0021 00033 (xxx.go:5) FUNCDATA $3, .main.stkobj(SB)0x0021 00033 (xxx.go:6) PCDATA $0, $10x0021 00033 (xxx.go:6) PCDATA $1, $00x0021 00033 (xxx.go:6) LEAQ type.[2]int(SB), AX0x0028 00040 (xxx.go:6) PCDATA $0, $00x0028 00040 (xxx.go:6) MOVQ AX, (SP)0x002c 00044 (xxx.go:6) CALL runtime.newobject(SB)0x0031 00049 (xxx.go:6) PCDATA $0, $10x0031 00049 (xxx.go:6) MOVQ 8(SP), AX0x0036 00054 (xxx.go:6) MOVQ $5, (AX)0x003d 00061 (xxx.go:6) MOVQ $6, 8(AX)0x0045 00069 (xxx.go:7) PCDATA $0, $20x0045 00069 (xxx.go:7) LEAQ type.int(SB), CX0x004c 00076 (xxx.go:7) PCDATA $0, $10x004c 00076 (xxx.go:7) MOVQ CX, (SP)0x0050 00080 (xxx.go:7) PCDATA $0, $00x0050 00080 (xxx.go:7) MOVQ AX, 8(SP)0x0055 00085 (xxx.go:7) MOVQ $2, 16(SP)0x005e 00094 (xxx.go:7) MOVQ $2, 24(SP)0x0067 00103 (xxx.go:7) MOVQ $4, 32(SP)0x0070 00112 (xxx.go:7) CALL runtime.growslice(SB)0x0075 00117 (xxx.go:7) PCDATA $0, $10x0075 00117 (xxx.go:7) MOVQ 40(SP), AX0x007a 00122 (xxx.go:7) MOVQ 48(SP), CX0x007f 00127 (xxx.go:7) MOVQ 56(SP), DX0x0084 00132 (xxx.go:7) MOVQ $7, 16(AX)0x008c 00140 (xxx.go:7) MOVQ $8, 24(AX)0x0094 00148 (xxx.go:8) PCDATA $0, $00x0094 00148 (xxx.go:8) MOVQ AX, (SP)0x0098 00152 (xxx.go:7) LEAQ 2(CX), AX0x009c 00156 (xxx.go:8) MOVQ AX, 8(SP)0x00a1 00161 (xxx.go:8) MOVQ DX, 16(SP)0x00a6 00166 (xxx.go:8) CALL runtime.convTslice(SB)... ... 我们可以看到append并没有以独立的身份出现在CALL汇编指令的后面而是被换成runtime.growslice、runtime.convTslice以及相关汇编指令了。Go技术专栏“改善Go语⾔编程质量的50个有效实践”主要满足广大gopher关于Go语言进阶的需求围绕如何写出地道且高质量Go代码给出50条有效实践建议欢迎大家订阅Gopher Daily(Gopher每日新闻)归档仓库 - https://github.com/bigwhite/gopherdaily我的联系方式微博https://weibo.com/bigwhite20xx微信公众号iamtonybai博客http://tonybai.comgithub: https://github.com/bigwhite“Gopher部落”知识星球https://public.zsxq.com/groups/51284458844544
http://www.pierceye.com/news/558748/

相关文章:

  • 帝国cms7.0网站搬家换域名换空间等安装教程万网云虚拟主机上传网站
  • 网站建设推广接单语wordpress 所有文章
  • 申请域名后怎么做网站网站建设与维护中国出版社
  • 洛阳做网站那家好课程网站建设开题报告
  • 到哪里建网站商务网站建设学期总结
  • 铜陵app网站做营销招聘网站开发公司需要投入什么资源
  • 建购物的网站需要多少钱wordpress不显示头像
  • 如何做一个个人网站长春网站建设wang
  • 湖南省做网站的网站资讯建设
  • 滨江网站建设制作如何建设网站方便后期维护
  • dedecms手机网站插件wordpress模板中文
  • 网站建设合同封面模板下载天津专业网站设计
  • 毕业设计网站做几个2345浏览器网页版
  • 南阳市网站建设国家建设协会工程质量分会网站
  • 苗木网站开发需求自己做网站转发新闻违法么
  • 招商网站建设解决方案wordpress页面转移
  • 门户网站开发方案文档做网站切片
  • 中国房地产新闻关键词seo排名优化如何
  • 网站大型网页游戏上海装修公司排名统帅
  • hostinger建站wordpress互联网营销方案策划
  • 门户网站维护方案杭州网站建设公司哪家好
  • 深泽网站建设在wordpress加入文件管理器
  • 国外社交网站建设福州市工程建设质量管理网站
  • 建设网站怎样分配给用户空间做网站优化有什么方法
  • 做计算机网站有哪些内容nodejs做网站容易被攻击吗
  • 咖啡店网站模板免费图表制作网站
  • 织梦瀑布流网站模板爱站网关键词
  • 网站运营需要什么条件网站建设开发公司微信公众号开发
  • 国外购买域名网站计算机网站建设论文总结
  • 杭州高端设计网站建设大学生个人简历电子版