整数

有符号整数

int8 int16 int32 int64

无符号整数

uin8 uin16 uin32 uin64

无符号整数 uintptr可以进行运算这点很重要请了解unsafe包,大小不明确,足以完整存放指针,uinptr只用于底层编程。

rune 类型是int32的同义词,常常用于指明一个值是unicode码点。

a:="这是golang"
for i:=0;i< len(a);i++  {
   fmt.Println(a[i])
}

输出:

232

191

153

230

152

175

103

111

108

97

110

103

这是按utf8码点输出的

但是如果将a变为rune类型

package main

import "fmt"

func main(){
   a:=[]rune("这是golang")
   for i:=0;i< len(a);i++  {
      fmt.Println(a[i])
   }

}

输出:

36825

26159

103

111

108

97

110

103

按照unicode码点序列输出

 

常量

在编译阶段就计算出表达式的值,意义在程序运行过程中防止恶意篡改。

声明常量使用关键字const

如:const e = 1234141241(也可以指定类型当然何必多此一举?)

常量声明不需要写type,会根据右边表达式类型自动推导。

常量生成器iota 就是枚举。

逻辑运算符

&&、||、!

浮点数

float32 float64

布尔

true false

字符串

原始字符串字面量`........`

字符串和字节切片转换

字符串可以使用切片的索引方式。

常用内置函数

append

len

cap

make

new

delete

close

panic

recover

数组

具有固定长度拥有零个或多个相同类型的元素序列

var a [3]int

var b [3]int = [3]int{1,2,3}

数组长度是数组类型的一部分。[2]int [3]int是不同类型的数组。

c := [...]int{99:-1} 这个数组有100个元素其中第100个元素的值-1其他元素均为类型零值。

go语言中数组是按值传递。

切片slice

slice是一种轻量级数据结构,

type lisce struct{

data  ptr     //指针

len   int     //实际长度

cap   int    //容量

}

一个底层数组可以对应多个slice 并且可以相互重叠。

切片索引方[m:n]返回一个原切片类型的一个切片

slice无法做比较因为同一个slice在同一时间可能拥有不同的值。

slice只可以和nil比较,但是slice==nil不代表slice为空,还是要通过len(slice)==0判断是否为空

切片可以包含多个子切片并且当子切片一直被引用那么原切片就不会被垃圾回收如下:

func main(){
   b := ftest()
   fmt.Println(b)

}

func ftest()[]int{
   a := []int{1,2,3,4,5,6,7,8,8,9,123,1,234,5,34,56,7}
   return a[1:3]
}

上面的代码切片a一直被引用到程序结束。改正方法如下:

func ftest()[]int{
   a := []int{1,2,3,4,5,6,7,8,8,9,123,1,234,5,34,56,7}
   c := make([]int,2)
   c = a[1:3]
   return c
}

map

散列表所有的键、值都拥有相同的数据类型

a:=make(map[string]int)

map不是一个变量不可以获取地址,因为map的增长可能导致已有元素重新分配新的位置使得获取的地址无效。

map迭代顺序不固定,不同的实现方法会使用不用的散列算法

map只可以和nil比较

如果散列表的value是结构体不能直接对其进行修改会报错。

type a struct{

b int

}

m = make(map[int]a)

v = a{b:1}

m[0] = v

m[0].b = 2 //崩溃

u:=m[0]

u.b = 2

m[0] = u //正确

z=make(map[int]*a)

z[0] = *v

z[0].b++ //正确

结构体

将零个或多个任意类型的命名变量组合在一起的聚合类型。

命名的结构体类型中不可以定义一个拥有相同结构体类型的成员变量,也就是一个聚合类型不可以包含他自己,但是可以包含一个指向相同结构体类型的指针。

结构体的匿名字段

type b struct {
   i int

}
type a struct {
   i int
   b
}

结构体a中存在匿名字段b,此时类型就是字段b的名称,类似于继承。

a结构体的字段总包含b称作b嵌入于a。

结构体中也可以嵌入接口。

当结构体中嵌入多个结构体并且其中有多个结构体的字段重名,那么外层结构体的字段会覆盖内层的结构体字段但是他们的内存空间都保留。比如:

  1. i 指的是结构体a中的i字段,如果想访问b可以a.b.i来访问

可比较性

如果结构体中所有成员都是可比较多那么这个结构体就是可比较的。

接口

接口即是约定,是一套必须实现的方法集蓝本,要想实现一个接口就要实现这个接口的所有方法。

package io

type Reader interface{

Read(p []byte)(n int,err error)

}

实现 io.Reader  接口

var s []byte

func (str s)(n int,err error){

return len(str),true

}

var r io.Reader = s

接口分为动态接口类型和动态接口值 上式中动态接口类型为[]byte 动态接口值为nil

类型断言

我们经常需要判断一个接口的动态类型,这时需要检测其是否为某一类型。

如果T是一个具体得到类型,写出来类似于x.(T) 检测x的动态类型是否为T,为真则返回x的动态接口值,为假则崩溃。

如果T是一个接口类型在判断动态类型是否满足这个接口。

如果类型断言出现在需要两个结果的表达式则不会崩溃。

f,ok := w.(*os.file)

类型分支类判断接口类型

switch x.(type):

case nil:

case int,uint:

case string:

default:

go语言学习笔记(二)的更多相关文章

  1. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

  2. C语言学习笔记二

    第二章 数组 一,定义: 数组是有序数据的结合,同一数据类型 整型数组     int arr[10]={0,1,2,4,5,6,7,8,9}; 字符数组     char str[6]={'h',' ...

  3. 【GO】GO语言学习笔记二

    基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 ...

  4. Go语言学习笔记(二) [变量、类型、关键字]

    日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号.   2.Go 同其他语言不同的地方在于变 ...

  5. [C语言学习笔记二] extern 函数的用法

    extern 用来定义一个或多个变量.其后跟数据类型名和初始值.例如: extern int a =10 它与 int,long long int,double,char的本质区别,在于 extern ...

  6. C语言学习笔记二---数据类型运算符与表达式

    一.C的基本语法单位 1.标识符:有效长度:31(DOS环境下) 2.关键字:main不是 3.分隔符:空格符,制表符,换行符,换页符 4.注释符:a./*.....*/   b.// 二.C的常用输 ...

  7. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  8. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  9. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  10. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

随机推荐

  1. chrome devtools tip(2)--自定义代码片段,构建你的工具箱

    平常开发中,有些代码片段常常用到的,比如,获取 url 参数,rgb转16进制,打印下当前页面的性能数据,给所有的 span 加个样式, 防抖节流,fetch接口,类似 jquery这样的顺手 选择 ...

  2. 微信小程序初级教程

    小程序代码构成 JSON 配置 WXML 模版 WXSS 样式 JS 逻辑交互 JSON 配置 在小程序中,JSON扮演的静态配置的角色. 小程序配置 app.json { "pages&q ...

  3. 一文读懂Java类加载机制

    Java 类加载机制 Java 类加载机制详解. @pdai Java 类加载机制 类的生命周期 类的加载:查找并加载类的二进制数据 连接 验证:确保被加载的类的正确性 准备:为类的静态变量分配内存, ...

  4. SQL查询选修了所有课程的学生姓名

    select sname from student where not exists (select * from course where not exists   (select * from s ...

  5. GO基础之数组

    一.数组的声明与遍历 package main import "fmt" //声明数组的形式1 ]int ], , , } func main() { // 声明数组的形式2 a ...

  6. js重点

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 一个普通类就能干趴你的springboot,你信吗?

    先声明本人并不是标题党,如果看了本篇文章并且认为没有得到任何收获,请您随便留言骂我,本人绝不还口,已经对springboot了如指掌大大神,求放过! 不BB了,直接上代码,请各位在自己的springb ...

  8. iOS开发 swift 3dTouch实现 附代码

    iOS开发 swift 3dTouch实现 附代码 一.What? 从iphone6s开始,苹果手机加入了3d touch技术,最简单的理解就是可以读取用户的点击屏幕力度大小,根据力度大小给予不同的反 ...

  9. Linux nfs服务介绍

    nfs服务介绍 nfs(Network File System) 网络文件系统,能使用户访问服务器的文件系统,就像访问自己的本机的文件系统一样,并且多个 客户端共享访问该文件系统. 目前nfs服务,较 ...

  10. abp中将SqlServer切换为MySQL

    一.移除默认SQL Server相关包 在EntityFrameworkCore项目下移除包Microsoft.EntityFrameworkCore.SqlServer.Microsoft.Enti ...