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

帝国cms企业网站模板中国建设信息化官网

帝国cms企业网站模板,中国建设信息化官网,it培训机构有哪些,流行的网站建设技术有哪些目录 一、基础数据类型 1.1 变量的定义方式 1.2 用%T输出变量的类型 二、复合数据类型 2.1 数组 2.1.2、数组的遍历 2.1.3 数组传参 2.2. 切片slice 2.2.1. 初始化切片 2.2.2. append向切片中追加元素 2.2.3. 切片的截取 2.3. map 2.3.1. map初始化 2.3.2. 添加和…目录 一、基础数据类型 1.1 变量的定义方式 1.2 用%T输出变量的类型 二、复合数据类型 2.1 数组 2.1.2、数组的遍历 2.1.3 数组传参 2.2. 切片slice 2.2.1. 初始化切片 2.2.2. append向切片中追加元素 2.2.3. 切片的截取 2.3. map 2.3.1. map初始化 2.3.2. 添加和删除 2.3.3. 遍历 2.4. 管道channel 2.4.1. 初始化 2.4.2. 放入和取出元素 2.4.2. 管道的遍历 2.5 结构体 2.5.1. 成员函数方法 2.5.2. 匿名结构体 2.5.3. 结构体中含有匿名成员 2.5.4. 结构体指针 2.5.5. 构造函数 2.5.6. 方法接收指针 之前是学习了C/C现在开始学go感觉go和C语言有很多相似的地方。 一、基础数据类型 1.1 变量的定义方式 相比于Cgo变量的定义就显得很灵活多变了 // 定义一个名称为 “variableName” 类型为 type 的变量 var variableName type// 定义并初始化初始化 “variableName” 的变量为 “value” 值类型是 “type” var variableName type value// 定义三个类型都是 “type” 的三个变量 var vname1, vname2, vname3 type /* 定义并初始化三个类型都是 type 的三个变量 , 并且它们分别初始化相应的值 vname1 为 v1 vname2 为 v2 vname3 为 v3 */ var vname1, vname2, vname3 type v1, v2, v3批量声明变量 var (a intb stringc float32d float64... )对于变量的类型我们也是可以直接忽略的:  让系统去给我们自动进行推导 var vname1, vname2, vname3 v1, v2, v3vname1, vname2, vname3 : v1, v2, v3: 这个符号直接取代了 var 和 type , 这种形式叫做简短声明。不过它有一个限制那就是它只能用在函数内部在函数外部使用则会无法编译通过所以一般用 var 方式来定义全局变量。 _下划线是个特殊的变量名任何赋予它的值都会被丢弃。 在这个例子中我们将值 32赋予 b 并同时丢弃 31 _, b : 31, 321.2 用%T输出变量的类型 先来试一下正常定义变量 //用%T来输出变量的类型var a intvar b bytevar f float32var t boolfmt.Printf(%T\n, a)fmt.Printf(%T\n, b)fmt.Printf(%T\n, f)fmt.Printf(%T\n, t) 再来试一下简短声明 二、复合数据类型 2.1 数组 一维数组其实就和C语言没多少区别的 func main() {var arr1 [5]int [5]int{}var arr2 [5]int{}var arr3 [5]int{3, 2} //给前两个元素赋值没赋值的默认为0var arr4 [5]int{2: 15, 4: 6} //给指定位置的元素赋值var arr5 [...]int{6, 5, 4, 3} //根据{}里面元素的个数推导出var arr6 [...]struct {name stringage int}{{tome, 18}, {same, 20}}} 二维数组 //3行4列只给前两行赋值且前两行的所有列还没有赋满var arr [3][4]int{{1, 2}, {3, 4}}//第一维可以用...推导第二维不能var arr2 [...][3]int{{1},{2,3}} 2.1.2、数组的遍历 //数组的遍历//1、比较简便的写法for i, ele : range arr {fmt.Println(index%d, ele %d, i, ele)}//2、像C语言一样遍历for i : 0; i len(arr); i {fmt.Println(arr[i])}//3、遍历二维数组for row, array : range arr2 {//先取出一行for col, ele : range array {//再遍历这一行fmt.Println(arr[%d][%d]%d, row, col, ele)}} 2.1.3 数组传参 package main import fmt//调用f1函数只会拷贝数组 func f1(arr [5]int) {arr[0] 1 }//f2传入数组的指针可以修改外面的数组 func f2(arr *[5]int) {//由于go语言会省略掉指针解引用的操作所以//这样写也可以 arr[0] 1(*arr)[0] 1//go语言的for循环没有C那种引用类型//for循环中i是arr的下标n是arr[i]的拷贝所以修改n不会修改arr[i]//如果想修改数组中的内容只能使用arr[i]的方式for i, n : range arr {arr[i] n 1} } func main() {var arr1 [5]int [5]int{}f1(arr1)fmt.Println(arr1)//[0 0 0 0 0]f2(arr1)fmt.Println(arr1)//[2 1 1 1 1] }2.2. 切片slice 数组不指定大小也不推导大小则它会是切片类型切片实际上是一个结构体类型通过一个指针指向底层的数组然后通过len和cap两个变量记录数组中数据的长度和数组的大小有点类似于C中的vector。 切片slice是对底层数组一个连续片段的引用所以切片是一个引用类型。 2.2.1. 初始化切片 make与new类似但make只用于slice、map以及channel的初始化非零值而new用于类型的内存分配并且内存置为零。 注意初始化切片的时候不能够在[]中赋值否则就变成数组了。 // 定义切片 func main() {var ss1 []int //声明一个切片但并没有初始化fmt.Println(ss1)var s1 []ints1 []int{1, 2, 3, 4}fmt.Println(s1)s1 make([]int, 3) //有点像C的new申请内存//输出切片的内容fmt.Println(s1)fmt.Println(len %d, cap %d, len(s1), cap(s1))//切片的判空//声明但未使用的切片的默认值是 nil//这里ss1只声明未经过使用,s1已经使用了被分配了内存所以不是nilfmt.Println(ss1 nil)fmt.Println(s1 nil)} 2.2.2. append向切片中追加元素 注意append会返回新的切片也就是说并不会改变原来的切片所以一般需要将返回的切片赋值给原来的切片。 var a []int a append(a, 1) // 追加1个元素 a append(a, 1, 2, 3) // 追加多个元素 a append(a, []int{1,2,3}...) // 追加一个切片2.2.3. 切片的截取 func sub_slice() {arr : make([]int, 3, 5)crr : arr[0:2] //前闭后开crr[1] 8fmt.Println(arr[1]) //观察arr【1】会不会影响crr append(crr, 9)fmt.Println(arr[2]) }运行一下观察结果 2.3. map 这里的map就相当于C中的map底层都通过哈希表实现。 2.3.1. map初始化 2.3.2. 添加和删除 2.3.3. 遍历 2.4. 管道channel 2.4.1. 初始化 管道是无法扩容的。 2.4.2. 放入和取出元素 2.4.2. 管道的遍历 channel支持for-range的方式进行遍历请注意几个细节 1、在遍历的时候如果channel没有关闭则会出现deadlock的错误。 2、在遍历的时候如果channel已经关闭则会正常遍历数据遍历完后会退出遍历。 3、遍历管道相当于从管道之中读取数据也就是说如果遍历完成管道将会为空。 4、管道关闭以后不能够再打开如果想接着使用管道可以再创建一个。 5、当管道长度满了以后如果没有人取走数据则无法继续往管道中写会报死锁错误因为需要阻塞住等管道中的数据被读走才能继续写 6、当管道空了以后如果不关闭管道继续读会报死锁错误因为管道空了以后继续读会被阻塞住。如果关闭管道为空时继续读则会读取默认值比如int类型的管道读取0。 7、管道关闭以后可以继续从管道中读取数据但是不能写入数据。 2.5 结构体 关于结构体类名以及成员变量第一个字母是否大写关乎到能否跨包访问如果结构体类名首字母大写则可以在其他包内使用该结构体成员变量首字母大写则可以在其他包内通过该结构体访问到该成员变量。 2.5.1. 成员函数方法 一般函数的定义方式为: func 函数名(变量名 变量类型)返回值类型{//函数体 } 而成员方法则只需要在func和函数名中间加上结构体的名字和类型即可 func (对象名 结构体)函数名(变量名 变量类型)返回值类型{//函数体 } 代码展示 2.5.2. 匿名结构体 2.5.3. 结构体中含有匿名成员 2.5.4. 结构体指针 2.5.5. 构造函数 go语言中没有构造函数和析构函数因为gc能够自动帮我们回收不需要的内存空间但为了和其他语言相符合我们可以模拟实现一个构造函数。 构造函数的名字可以随便起 2.5.6. 方法接收指针 这个和C语言相同就是传值和传指针的区别。
http://www.hkea.cn/news/14329122/

相关文章:

  • 如何做设计师个人网站视频广告网站
  • 广州网站建设优化公司淄博建设网站
  • 手机网站宽度多少合适临时域名 wordpress
  • 长沙免费网站建站模板建设行政主管部门政务网站
  • 网站名称图标如何做才能显示新手怎么把源码做成软件
  • 怎么给餐饮店做网站网站建设群标签好写什么
  • 东莞做网站优化天助网络松江企业做网站
  • 网站编写软件哈尔滨建工建设集团
  • 手机摄影网站搜索优化seo
  • 网站开发代理商设计企业vi
  • 网站简介模板网站建设深圳官网
  • 百度资源站长平台宁波论坛网站哪个最好
  • 团购网站平台建设沈阳建信建设工程有限公司
  • 梅州建站怎么做域名备案怎么关闭网站
  • 网站关键词优化步骤虚拟网站免费注册
  • 怎样做招聘网站分析移动网站开发 书
  • 网站建设公司怎么宣传网站备案 是域名还是空间
  • 公司网站域名申请上海优质网站seo有哪些
  • 湖北可以做网站方案的公司没有备案的网站百度能收录
  • 鞍山网站设计制作网站网页无法访问 wordpress
  • 惠安建设局网站小程序直播开发教程
  • 班级网站主页设计模板wordpress侧面分类插件
  • 中山 网站建设一条龙网上国网app官方下载
  • 龙岗汤坑社区网站建设视频网站建设解决方案
  • 科技公司网站响应式漯河logo设计公司
  • php婚庆网站国外做黄漫的网站
  • 佛山 网站开发wordpress页面构造器
  • 沈阳建设网站建站wordpress 火箭
  • 网站建设图标中国建设信用卡积分兑换网站
  • 网站官网建设的价格嵌入式应用软件开发