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

wordpress+手机站目录上海公司牌照价格2022

wordpress+手机站目录,上海公司牌照价格2022,工商企业信息查询网站,免费网站建设必择山东绘政科技一、Go语言特性 语法简单并发性。Go语言引入了协程goroutine#xff0c;实现了并发编程内存分配。Go语言为了解决高并发下内存的分配和管理#xff0c;选择了tcmalloc进行内存分配#xff08;为了并发设计的高性能内存分配组件#xff0c;使用cache为当前线程提供无锁分配…一、Go语言特性 语法简单并发性。Go语言引入了协程goroutine实现了并发编程内存分配。Go语言为了解决高并发下内存的分配和管理选择了tcmalloc进行内存分配为了并发设计的高性能内存分配组件使用cache为当前线程提供无锁分配多个central在不同线程间平衡内存单元复用。在更高层次heap管理大块的内存分配用以切片成不同等级的复用内存块。快速分配和二级平衡机制可以更高性能的进行内存分配垃圾回收。在Go中指针的运算被阻止故垃圾回收会容易点静态链接。Go的便衣只需要编译后的一个可执行文件将运行时依赖的库直接打包到可执行文件内部无需附加任何东西就能部署标准库。Go的标准库比较丰富工具链。无论是编译、格式化、错误检查、帮助文档还是第三方包下载更新都能有对应的工具 二、Go的变量 1.变量的声明 Go是静态语言因此其变量必须要有明确的类型这样编译器才能检查变量正确性声明变量语法 var 变量名 变量类型//举例声明两个变量都为int指针类型var a, b *int(1) 变量的声明 当一个变量被声明后系统会自动初始化一个值。int类型初始值为0float类型初始值为0.0bool类型初始值为falsestring类型初始值为空字符串切片、函数、指针类型初始值为nil变量命名遵循驼峰命名法即首个单词小写每个新单词首字母大写。如GoStudy批量声明变量的格式 //方式一使用关键字var和花括号{}可以将一组变量定义放在一起var{a intb stringc byted []float32e func()boolf struct{x int}}//方式二把变量定义和初始化放在一起名字 : 表达式。//但这种方式有以下限制1.不能提供数据类型2.只能用在函数内部func main(){x : 10a, s : 1, abc}2.变量的初始化 当一个变量被声明后系统会自动初始化一个值。int类型初始值为0float类型初始值为0.0bool类型初始值为falsestring类型初始值为空字符串切片、函数、指针类型初始值为nil (1) 变量初始化语法 //方式一var 变量名 类型 表达式var a int 10//方式二省略其类型采用编译器推导类型的格式Lvar 变量名 表达式var a 10//方式三更精简的写法省略关键字var 变量名 : 表达式a : 10//注意1.由于使用了:而不是因此方式三的写法的左边变量名必须是没有定义过的变量若该变量定义过则编译器会报错2.在多个短变量声明和复制中至少又一个新声明的变量出现在左值中即使其他变量名可能是重复声明的编译也不会出错如下所示res1, err : MyTest(2)res2, err : MyTest(3)(2) 多重赋值 Go语言的多重赋值用于变量值的互换 /*var a int 100var b int 200a, b b, a*/package mainimport fmtfunc main(){var a int 100b : 200fmt.Println(a , a, b , b)b, a a, bfmt.Println(a , a, b , b)}结果 3.匿名变量 Go语言中支持没有名称的变量、类型或者方法这些统称为匿名变量匿名变量是为了增强代码的灵活性匿名变量是一个下划线_被称为空白标识符_可以像其他标识符一样用于变量的声明或者赋值任何类型都可以赋值给它但一旦赋值给这个标识符的值都会被抛弃因此这些值无法在后续代码中使用匿名变量没有内存空间不会给它分配内存 package mainimport fmtfunc GetTheData()(int, int){a : 200b : 300return a, b}func main(){a, _ : GetTheData()_, b : GetTheData()fmt.Printf(a%d, b%d,a, b)}结果 4.变量作用域 局部变量函数内定义的变量作用域是函数体内函数调用结束后变量会被销毁。形参的作用域跟局部变量一样。全局变量函数外定义的变量全局变量的声明必须用关键字var。若全局变量和局部变量同名在函数内以局部变量为准。 三、Go的常量和const 和C一样Go中是用const关键字来定义常量常量是在编译时创建的值在创建后就不会改变 //常量的声明const a 3.1415926//常量的批量声明const{b 2.12345c 1.23455}1.无类型常量 Go语言中有个与其他语言不一样的地方虽然一个常量可以是任意一个明确的基础类型的值例如可以是int类型的值或者string类型的值但许多常量没有一个明确的基础类型 //math.Pi可无类型的浮点数常量可直接用于任意需要浮点或者复数的地方var x float32 math.Pivar y complex128 math.Pivar z float64 math.Pi若math.Pi已经被确定为特定类型之后那么结果的精度可能不一样。若需要一个精确的值则需要进行显式类型转换 const Pi float64 math.Pivar x float32 Pi //x的精度就会改变var y float32 (float32)Pi //y进行了类型转换精度不会变var z complex128 (complex128)Pi //z进行了类型转换精度不会变四、Go的数据类型 1.Go的基本数据类型 类型名含义bool布尔型true、falsestring字符串类型int、int8、int32、int64有符号整型uint、uint8、uint16、uint32、uint64、uintptr无符号整型byte字符类型rune字符类型float32、float64浮点型complex64、complex128复数类型 2.整型 (1) 有符号整型 int8表示8位有符号整型范围是-128127int16表示16位有符号整型范围是-3276832767int32表示32位有符号整型范围是-21474836482147483647int64表示64位有符号整型范围是-92233720368547758089223372036854775807int根据编译器和计算机硬件的不同数值大小不同在32位机器中为32位4字节在64位机器中位64位8字节 (2) 无符号整型 uint8表示无符号8位范围是0255uint16表示无符号16位范围是0-65535uint32表示无符号32位范围是04294967295uint64表示无符号64位范围是018446744073709551615uint根据不同的底层平台32 位系统是32位64 位系统是64位 3.浮点型 float3232位浮点型float6464位浮点型 4.布尔类型 布尔类型的值只有两种true或false默认是false布尔类型无法参与数值运算也无法与其他类型进行转换 5.复数类型 复数是有两个浮点数组成一个是实部一个是虚部。复数的类型有两种complex12864位实数和虚数和complex6432位实数和虚数复数的默认类型是complex128复数也可以用 和 ! 进行相等比较只有两个复数的虚部和实部都相等时它们才相等复数的声明方式 //var name complex128 complex(x,y)package mainimport fmtfunc main(){var x complex128 complex(1,2) //1 2ivar y complex128 complex(3,4) //3 4ifmt.Println(x * y)fmt.Println(real(x * y))fmt.Println(imag(x * y))var z complex128 complex(-5,10)var w complex128 complex(5,10)fmt.Println(x * y z)fmt.Println(x * y w)}结果 6.字符类型 Go语言中字符类型有以下两种 1一种是uint8类型即byte类型代表一个ASCII码字符 2另一种是rune类型代表一个UTF-8字符当需要处理中文、日文或其他字符时则需要用到rune类型。等价于int32类型byte类型时uint8的别名使用举例var ch byte ‘A’在ASCII码中A的值时65使用16进制表示为41故下面写法是等效的var ch byte 65 或 var ch byte ‘\x41’Go语言支持UTF-8即Unicode字符该字符称为Unicode代码点或者runes并在内存中用int来表示一般使用格式Uhhhhh其中h表示一个16进制数在书写Unicode字符时需要在16进制数前加上\u或者\U。若需要使用到4字节则使用\u前缀若需要使用到8字节则使用\U前缀。 package mainimport fmtfunc main(){var ch int \u0041var ch2 byte Avar ch3 int \U00000061fmt.Println(ch, ch2, ch3)fmt.Printf(ch%c, ch2%c, ch3%c, ch,ch2,ch3)}结果 Unicode包中内置了一些用于测试字符的函数这些函数的返回值都是一个布尔值如下 1判断是否是字母unicode.IsLetter(ch) 2判读是否是数字unicode.IsDigit(ch) 3判断是否为空白字符unicode.IsSpace(ch) package mainimport (fmtunicode)func main(){var ch rune Avar gi rune 1var sp rune fmt.Println(unicode.IsLetter(ch))fmt.Println(unicode.IsLetter(gi))fmt.Println(unicode.IsDigit(ch))fmt.Println(unicode.IsDigit(gi))fmt.Println(unicode.IsSpace(sp))}结果 7.字符串类型 Go语言中字符串的内部实现使用UTF-8编码通过rune类型可以方便地对每个UTF-8字符进行访问。Go也支持按照传统地ASCII码地方式逐字符进行访问可以用反引号’来定义多行字符串 package mainimport (fmt)func main(){const str aaaabbbbccccddddfmt.Println(str)}结果 8.数据类型转换 Go语言不存在隐式类型转换因此类型转换必须要显式的声明valueOfTypeB typeB(valueOfTypeA) package mainimport (fmtmath)func main(){fmt.Println(int range:, math.MinInt, math.MaxInt)fmt.Println(int8 range:, math.MinInt8, math.MaxInt8)fmt.Println(int16 range:, math.MinInt16, math.MaxInt16)fmt.Println(int32 range:, math.MinInt32, math.MaxInt32)fmt.Println(int64 range:, math.MinInt64, math.MaxInt64)var a int32 912345678//将a转换为十六进制会发生数值截断fmt.Printf(int320x%x, %d\n, a,a)var pi float32 3.14fmt.Println(pi)fmt.Println(int(pi))}结果 9.指针 指针在Go语言中可被拆分成两个核心概念 1类型指针允许对这个指针类型的数据进行修改传递数据可以使用指针而不需要进行数据之间的拷贝。类型指针不能进行偏移和运算。 2切片由指向起始元素的原始指针、元素数量和容量组成指针相关的概念指针地址、指针类型、指针取值 (1) 指针地址和指针类型 指针就是存放变量的地址一个指针变量可以指向任何一个值的内存地址。按照编译器的不同在32bit和64bit机器上指针大小不一样在32位机器上指针的大小为4字节在64位机器上指针的大小为8字节。默认值为nil。缩写为ptr。每个变量都有一个地址跟c一样为取地址操作符若想获取这个变量的地址用即可。*为解引用操作符可以获取到指针所指向的地址中存的值。指针的类型为T package mainimport fmtfunc main(){a : 100b : ac : hello worldfmt.Printf(a的地址是%p, b的地址是%pc的地址是%p\n, a, b, c)aptr : abptr : bcptr : cfmt.Printf(a的地址是%p, b的地址是%pc的地址是%p\n, aptr, bptr, cptr)fmt.Println(a的值是, *aptr)fmt.Printf(b的值是%c\n, *bptr)fmt.Println(c的值是, *cptr)//指针的类型fmt.Printf(aptr的类型是%T\n, aptr)fmt.Printf(bptr的类型是%T\n, bptr)fmt.Printf(cptr的类型是%T\n, cptr)}结果 创建指针的另一种方法new()函数new(类型) package mainimport fmtfunc main(){iptr : new(int)stptr : new(string)*iptr 100*stptr hello worldfmt.Println(*iptr,*iptr)fmt.Println(*stptr,*stptr)a : 200*iptr afmt.Println(*iptr,*iptr)}结果 10.类型别名type关键字 (1) 类型别名 Go中的类型别名的出现主要是为了解决代码升级时迁移中存在的类型兼容性问题。在C中代码重构升级可以用宏快速定义一段新的代码而Go语言中没有宏的概念。写法type int rune类型别名与类型定义表面上看只有一个等号的差异实际区别如下 package mainimport fmttype NewInt int //类型定义type IntNew int //类型别名func main(){var a NewInt //使用类型定义定义的新类型fmt.Printf(a的类型为:%T\n,a)var b IntNew //使用类型别名定义的新类型fmt.Printf(b的类型为:%T\n,b)}结果 上述结果不难发现a的类型是main.NewInt即main包下定义的NewInt类型b的类型还是int类型。而IntNew该类型只会在代码中存在编译完成后就不会存在。 (2) 类型别名和类型定义的区别 类型定义 1一个新定义的类型与源类型是两个不同的类型 2一个新定义的类型与源类型底层的类型是一样的但是不能进行直接的赋值可以进行显式的类型转换 3类型定义可以出现在函数体里 package mainimport fmtfunc main(){type NewInt int //类型定义var a NewInt 100 //使用类型定义定义的新类型var b int 200var c int 300fmt.Println(a的值为, a)fmt.Println(b的值为, b)fmt.Println(c的值为, c)b int(a)a NewInt(c)fmt.Println(a的值为, a)fmt.Println(b的值为, b)fmt.Println(c的值为, c)}结果 类型别名 1类型别名与源类型是同一种类型 2类型别名与源类型之间可以进行直接的赋值 package mainimport fmtfunc main(){type IntNew int //类型别名var a IntNew 100 //使用类型别名定义的新类型var b int 200var c int 300fmt.Println(a的值为, a)fmt.Println(b的值为, b)fmt.Println(c的值为, c)b a //类型别名与源类型就是同一类型故可以直接相互赋值a cfmt.Println(a的值为, a)fmt.Println(b的值为, b)fmt.Println(c的值为, c)}结果
http://www.w-s-a.com/news/850101/

相关文章:

  • 网站开发强制开启浏览器极速模式建设网站有什么风险
  • 360全景网站建设常州专业网站建设公司咨询
  • 重庆大渡口网站建设网站增加一体化建设功能的好处
  • 网站开发完整视频网站上传 404
  • 自适应网站做推广北京建设工程招标网
  • 外贸网站设计注意事项网上商城官网入口
  • 正规的营销型网站建设公司微官网是网站吗
  • 南京行业门户网站无锡阿里巴巴做网站
  • 河北省和城乡住房建设厅网站wamp wordpress打不开
  • 在哪个平台做网站比较好自动app优化
  • 有没有能帮人快速网站备案的机构个人学做网站
  • 凌云县 城市建设 网站西安市建网站
  • 织梦xml网站地图公众号公众平台
  • 长春省妇幼网站做四维学校网站系统破解版
  • 安阳免费搭建自己的网站个人网站做商城会怎样
  • 网站建设专家公司排行网站举报有奖平台
  • 程序员不是做网站的公司装修效果全景图
  • 桥东区住房和建设局网站怎么做网上问卷
  • 做期货要看哪些网站伪装的福祉 wordpress
  • 做网站需要多少费用网站建设需要懂什么语言
  • 网站手机端做app开发商城设计方案
  • 在建设厅网站上查询注销建造师查域名是否注册
  • 企业网站推广方案策划公司网站在国外打开很慢使用cdn好还是国外租用服务器好
  • 龙华o2o网站建设百度不收录什么网站吗
  • 模板搭建网站百度信息流推广
  • 移动端网站制作模板自己做的网站点击赚钱
  • 网站站长如何赚钱wordpress抓取别人网站
  • 做网站媒体专门做产品定制的网站
  • 公司企业网站建设步骤免费asp网站模板
  • 台州企业网站搭建价格做留言的网站