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

公司网站优点手机微网站开发的目的和意义

公司网站优点,手机微网站开发的目的和意义,最新新闻热点事件国际,做搜狗手机网站快速Go后端开发 – 数组 slice map range 文章目录 Go后端开发 -- 数组 slice map range一、数组1.数组的声明和初始化2.数组的传参 二、slice切片1.slice的定义和初始化2.len()和cap()函数3.空切片4.切片截取5…Go后端开发 – 数组 slice map range 文章目录 Go后端开发 -- 数组 slice map range一、数组1.数组的声明和初始化2.数组的传参 二、slice切片1.slice的定义和初始化2.len()和cap()函数3.空切片4.切片截取5.append() 和 copy() 函数6.slice的传参 三、map1.map的声明和定义2.map的增删查改3.map的传参 四、Go 语言范围(Range) 一、数组 1.数组的声明和初始化 go中的数组是固定长度的 声明数组 Go 语言数组声明需要指定元素类型及元素个数语法格式如下 var variable_name [SIZE] variable_type例如 var balance [10] float32初始化数组 初始化数组中 {} 中的元素个数不能大于 [] 中的数字。 var balance [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} //也可以省略var balance2 [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}如果忽略 [] 中的数字不设置数组大小Go 语言会根据元素的个数来设置数组的大小 var balance []float32{1000.0, 2.0, 3.4, 7.0, 50.0}以下实例读取了第五个元素。数组元素可以通过索引位置来读取或者修改索引从0开始第一个元素索引为 0第二个索引为 1以此类推。 balance[4] 50.0实例 package array_goimport fmtfunc Array() {var arr1 [10]intarr2 : []int{1, 2, 3}fmt.Println(arr1[0])for i : 0; i len(arr1); i {fmt.Println(arr2[i])} }注意数组中未初始化的元素默认为0 2.数组的传参 数组传参的形参类型只能写成固定类型的数组如myArr [10]int数组的长度是固定的不同长度的数组属于不同的类型 实例 package array_goimport fmtfunc Array() {var arr1 [10]intprintArr(arr1) }func printArr(myArr [10]int) {for i, num : range myArr {fmt.Println(i, num)} }数组传参是值传递传入函数的数组只是原数组的值拷贝修改函数中的数组并不会影响原数组 二、slice切片 Go 语言切片是对数组的抽象。 Go 数组的长度不可改变在特定场景中这样的集合就不太适用Go中提供了一种灵活功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的可以追加元素在追加时可能使切片的容量增大。 切片底层是有一个数组的切片的变量名就是指向底层数组首地址的指针 1.slice的定义和初始化 定义切片 可以声明一个未指定大小的数组来定义切片 切片不需要说明长度 var identifier []type或使用make()函数来创建切片make函数可以为容器开辟空间 var slice1 []type make([]type, len)也可以简写为slice1 : make([]type, len)也可以指定容量其中capacity为可选参数。 make([]T, length, capacity)这里 len 是数组的长度并且也是切片的初始长度。 实例 func Slice() {//切片定义var slice1 [] intvar slice2 make([]int, 5)slice3 : make([]int, 3, 10) }切片初始化 直接初始化切片[]表示是切片类型{1,2,3}初始化值依次是1,2,3.其caplen3 s :[] int {1,2,3 }初始化切片s,是数组arr的引用 s : arr[:]将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片 s : arr[startIndex:endIndex]缺省endIndex时将表示一直到arr的最后一个元素 s : arr[startIndex:]缺省startIndex时将表示从arr的第一个元素开始 s : arr[:endIndex]通过切片s初始化切片s1 s1 : s[startIndex:endIndex]通过内置函数make()初始化切片s[]int 标识为其元素类型为int的切片 s :make([]int,len,cap)实例 func Slice() {//切片初始化arr : [3]int{1, 2, 3}s1 : []int{4, 5, 6}s3 : arr[0:2]//s4 : arr[1:]//s5 : arr[:3]s6 : s1[1:]for i : 0; i len(s3); i {fmt.Println(s3[i])}for i : 0; i len(s6); i {fmt.Println(s6[i])} }注意[startIndex:endIndex]初始化的是startIndex到endIndex-1的元素 2.len()和cap()函数 切片是可索引的并且可以由 len() 方法获取长度。切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。 实例 package slice_goimport fmtfunc Slice() {s1 : []int{4, 5, 6}fmt.Println(s1 len:, len(s1), s1 cap:, cap(s1)) }3.空切片 一个切片在未初始化之前默认为 nil长度为 0 实例 package slice_goimport fmtfunc Slice() {var s1 []intfmt.Println(s1 len:, len(s1), s1 cap:, cap(s1), s1 , s1)if s1 nil {fmt.Println(切片是空的)} }4.切片截取 可以通过设置下限及上限来设置截取切片[lower-bound:upper-bound] 实例 package slice_goimport fmtfunc Slice() {s1 : []int{1, 2, 3, 4, 5, 6, 7, 8, 9}//打印原始切片fmt.Println(s1 , s1)//打印子切片从索引1包含到索引4不包含fmt.Println(s1[1:4], s1[1:4])//默认下限为0fmt.Println(s1[:5], s1[:5])//默认上限为len(s1)fmt.Println(s1[4:], s1[4:]) }若切片和数组截取后直接赋值给其他切片那么这两个切片指向的是同一个地址的数组相当于执行的是浅拷贝 如果更改任意切片中元素的值则两个切片的值都会被改变 package slice_goimport fmtfunc Slice() {arr : [5]int{1, 2, 3}s : []int{4, 5, 6}s1 : arr[1:]s2 : s[1:]s1[0] 100s2[0] 200fmt.Println(arr)printSlice(s1)printSlice(s)printSlice(s2) }func printSlice(arr []int) {fmt.Println(len , len(arr), cap , cap(arr), numbers , arr) }5.append() 和 copy() 函数 如果想增加切片的容量我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。 实例 package slice_goimport fmtfunc Slice() {var numbers []int//允许追加空切片numbers append(numbers, 0)fmt.Println(len , len(numbers), cap , cap(numbers), numbers , numbers)//向切片追加一个元素numbers append(numbers, 1)fmt.Println(len , len(numbers), cap , cap(numbers), numbers , numbers)//同时添加多个元素numbers append(numbers, 2, 3, 4)fmt.Println(len , len(numbers), cap , cap(numbers), numbers , numbers)//创建切片是numbers的两倍容量numbers1 : make([]int, len(numbers), cap(numbers)*2)//拷贝numbers的数据到numbers1中copy(numbers1, numbers)fmt.Println(len , len(numbers1), cap , cap(numbers1), numbers , numbers1) }copy函数执行的是深拷贝拷贝前后的切片指向的是不同的地址空间 而且copy函数会覆盖slice中的原始数据 实例 package slice_goimport fmtfunc Slice() {//arr : [5]int{1, 2, 3}s1 : []int{4, 5, 6, 7, 8}//s1 : arr[1:]s2 : make([]int, 3)copy(s2, s1[2:5])s2[0] 100printSlice(s1)printSlice(s2) }func printSlice(arr []int) {fmt.Println(len , len(arr), cap , cap(arr), numbers , arr) }6.slice的传参 使用slice作为函数参数类型就不会收到数组长度的限制 package slice_goimport fmtfunc Slice() {arr1 : []int{1, 2, 3, 4}printSlice(arr1) }func printSlice(arr []int) {fmt.Println(len , len(arr), cap , cap(arr), numbers , arr) }slice在传参的过程中是引用传递传递的指针不是值传递可以在函数中直接修改原slice package slice_goimport fmtfunc Slice() {arr1 : []int{1, 2, 3, 4}changeSlice(arr1) }func changeSlice(arr []int) {arr[2] 10fmt.Println(arr) }三、map Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据key 类似于索引指向数据的值。 Map 是一种集合所以我们可以像迭代数组和切片那样迭代它。不过Map 是无序的我们无法决定它的返回顺序这是因为 Map 是使用 hash 表来实现的。 1.map的声明和定义 可以使用内建函数 make 也可以使用 map 关键字来定义 Map: /* 声明变量默认 map 是 nil */ var map_variable map[key_data_type]value_data_type/* 使用 make 函数 */ map_variable make(map[key_data_type]value_data_type)如果不初始化 map那么就会创建一个 nil map。nil map 不能用来存放键值对 第一种声明 先定义map再用make函数开辟空间 package map_goimport fmtfunc Map() {var map1 map[string]string //此时的map是空的//在使用map前需要先makemake的作用就是给map分配数据空间map1 make(map[string]string, 10)map1[one] phpmap1[two] golangmap1[three] javafmt.Println(map1) }第二种声明 直接使用make函数声明和定义 package map_goimport fmtfunc Map() {map2 : make(map[string]string) // 此处可以不写map的大小后面赋值的时候会自动扩容map2[one] phpmap2[two] golangmap2[three] javafmt.Println(map2) }第三种声明 直接在声明时赋值每个键值对后都要加, package map_goimport fmtfunc Map() {map3 : map[string]string{one: php,two: golang,three: java, // 每一个键值对后面都需要加,}fmt.Println(map3) }实例 package map_goimport fmtfunc Map() {language : make(map[string]map[string]string)language[php] make(map[string]string, 2)language[php][id] 1language[php][desc] php是世界上最美的语言language[golang] make(map[string]string, 2)language[golang][id] 2language[golang][desc] golang抗并发非常goodlanguage[golang][name] golangfmt.Println(language) }2.map的增删查改 增、改都使用map_name[key_data]就可以实现而删除需要使用delete函数delete(map_name, key_data)查的时候使用val, key mapname[key_data]可以得到map中该key_data对应的val_data如果存在val会被赋值val_datakey会被赋值true如果不存在key会被赋值false注意返回顺序第一个返回值是val_data第二个返回值是key是否存在 实例 package map_goimport fmtfunc Map() {language : make(map[string]map[string]string)language[php] make(map[string]string, 2)language[php][id] 1language[php][desc] php是世界上最美的语言language[golang] make(map[string]string, 2)language[golang][id] 2language[golang][desc] golang抗并发非常goodlanguage[golang][name] golangfmt.Println(language)//增language[cpp] make(map[string]string)language[cpp][id] 3fmt.Println(language)//删delete(language, cpp)delete(language[php], desc)fmt.Println(language)//查val, key : language[golang]if key {fmt.Println(key, val)} else {fmt.Println(no key)}//改language[golang][name] GOLANGfmt.Println(language) }3.map的传参 map的传参是引用传参 package map_goimport fmtfunc Map() {map1 : make(map[int]string)map1[1] cppmap1[2] javamap1[3] golangfmt.Println(map1)fmt.Println(-------------)changeMap(map1)fmt.Println(map1) }func changeMap(myMap map[int]string) {myMap[0] python }四、Go 语言范围(Range) Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引值在集合中返回 key-value 对的 key 值。 对于映射它返回下一个键值对的键。Range返回一个值或两个值。如果在Range表达式的左侧只使用了一个值则该值是下表中的第一个值。 实例 package range_goimport fmtfunc Range() {arr1 : [5]int{1, 2, 3, 4}for i, num : range arr1 {fmt.Println(i, num)}slice1 : arr1[:3]for i, num : range slice1 {fmt.Println(i, num)}map1 : make(map[int]string)map1[0] xiaomingmap1[1] xiaogangmap1[2] xiangzhaofor key, value : range map1 {fmt.Println(key, value)} }如果range返回的两个值中不想访问某个值可以使用_代替表示匿名接受 package range_goimport fmtfunc Range() {arr1 : [5]int{1, 2, 3, 4}for _, num : range arr1 {fmt.Println(num)} }
http://www.zqtcl.cn/news/712454/

相关文章:

  • 嘉定企业网站开发建设网站建设常识网站建设技术知识大全
  • wordpress网站导航网站上如何做问卷调查
  • 南通网站搜索引擎优化海外学校网站建设
  • 个人站长适合做什么网站跨境电商数据分析网站
  • seo网站怎么优化影视制作公司简介
  • 如何制作一个自己的网页网站合肥网络优化公司有几家
  • 做网站的公司一年能赚多少钱织梦修改网站背景颜色
  • 门户网站建设的报价淘宝联盟怎么建网站
  • 常用的网站开发公司注册名称怎么起
  • j动态加载网站开发南京建设网站公司哪家好
  • 云南网站建设工具wordpress防御ip攻击
  • 珠海市网站建设开发公司站长工具whois查询
  • 网站备案icp过期网站建设好了怎么做推广
  • 网站自动识别手机代码网络服务器是指
  • 做自媒体那几个网站好点乐清做网站建设
  • 如何制作自己的网站在线观看2021网页源码
  • 电子商务网站建设百度文库工业设计公司招聘
  • 网站seo测评餐厅设计公司餐厅设计
  • 深圳网站seo推广wordpress swf 上传
  • 织梦做双语网站怎么做制作网站的教程
  • 公司网站开发的国内外研究现状个人网页设计大全
  • 做一个网站人员网站建设及推广优化
  • 胶州市城乡建设局网站能进封禁网站的浏览器
  • 网站做几级等保荣耀商城手机官网
  • 营销网站费用渭南网站建设公司
  • wordpress主题集成插件下载网站如何做360优化
  • 有什么在线做文档的网站网站开发需要用到哪些技术
  • 网站套餐可以分摊吗吗移动登录网页模板免费下载
  • asp网站会员注册不了但是打不开网页
  • wordpress 中文网店杭州排名优化公司