1   If  for 后面没有小括号。后面的花括号,要在当前行,并且中间有内容,右花括号要单独一行。

因为go会格式化代码,自动插入分号。

2 函数和方法的区别:

方法需要有一个接受者(selector)实列的函数。这个实例必须在和方法同样的包中生命。

func Add(a ,b int){ //函数

fmt.Println(a+b)

}

func (a myInt) Add (b myInt){ //方法

fmt.Println(a+b)

}

参考文章:https://blog.csdn.net/zyc88888/article/details/80307008

3 首写是大写的字母的名称是被导出的。

4  括号后面的int是返回值的类型。 返回值的个数和函数中返回值的个数对应。可以有多个返回值。

func add(x int, y int) int{
   return x + y
}

5 var 语句定义了一个变量列表。

6 := 在go中是简洁赋值语句,只能用在函数内部。函数外部,需要用var,func等语句开头。

在函数中,`:=` 简洁赋值语句在明确类型的地方,可以用于替代 var 定义。

7

Go 的基本类型有Basic types

bool

string

int  int8  int16  int32  int64

uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名

// 代表一个Unicode码

float32 float64

complex64 complex128

8 fmt.Printf(" x is type of %T",x)

可以确定x数值的类型。

9 常量用const定义不能使用:=语法定义。

10 byte为什么要&0xff 这样能保证符号位不变

0xff 的二进制位为 11111111

在进行& 运算时,高位补0 所以,可以保证另一个数的低8位不变。

参考文章:https://blog.csdn.net/i6223671/article/details/88924481

11 math.Sqrt() 是开平方根的意思。

12 math.Pow(x, n)

返回的是x 的n次方。

13 fmt.Printf("%g >= %g\n",v,lim)

v 和lim 能代替前面的 %g v,代替第一个 lim 代替第二个。

14 go语言 牛顿法开平方:

作为练习函数和循环的简单途径,用牛顿法实现开方函数。

在这个例子中,牛顿法是通过选择一个初始点 z 然后重复这一过程求 Sqrt(x) 的近似值:

为了做到这个,只需要重复计算 10 次,并且观察不同的值(1,2,3,……)是如何逐步逼近结果的。 然后,修改循环条件,使得当值停止改变(或改变非常小)的时候退出循环。观察迭代次数是否变化。结果与 [[http://golang.org/pkg/math/#Sqrt][math.Sqrt] 接近吗?

提示:定义并初始化一个浮点值,向其提供一个浮点语法或使用转换:

func main() {
   fmt.Println(sqrt(3))
}

func sqrt(x float64)float64{
    z := x
   for i := 0; i < 10 ; i++  {
      z = z - (z*z -x)/(2*z)
   }
   return z
}

15 switch 匹配成功会自动停止。

16 没有条件的switch和switch true 一样。

17 defer 可以延迟一个函数的执行。

Defer 延迟函数的 执行顺序是后进先出。

被defer延迟的函数的实参(如果是方法,还包括方法的接收者),在defer语句出就会计算,而不是等到调用时才计算。

18 go语言有指针,指针指向了变量的内存地址。

var i  = 10

p :=  &i

&会生成其作用对象的指针,上面i的指针就赋值给了p

fmt.PrintLn(p)

fmt.PrintLn(*p)

*符号表示指针指向的底层的值,上面的第一个答应的p会打印一个内存地址,第二个p会答应10

Go 语言没有指针运算。

19 struct  表示的是结构体,表示的就是一个字段的集合。

20 结构体中的字段使用.号来访问。

type Vertex struct {
   x int
   y string
}
func main() {
   v := Vertex{100, "56565656"}
   v.x = 66
   fmt.Println(v.x)
   
}

20 结构体的字段可以通过,结构体的指针访问,并且这种间接访问可以改变结构体字段的值。

21 p = Vertex{x:10} 只列出x的值,没给y的值。

22 类型 [n]T 是一个有 n 个类型为 T 的值的数组。

23 \n是换行符。

24 []T是一个元素类型为T的且切片(slice)。

25 s[lo:hi]

表示从lo到hi-1的元素,包含头不包含尾。其他的切割形式也是。

26 slice由make创建会返回一个零长度的数组,并且返回一个slice指向这个数组。

b := make([]int,0,5)

这个make 定义了一个长度为0,空间为5的数组,并且返回了这个数组的切片b

27 数组赋值的时候,空间大小会直接传递过去,赋予的只是值。

28 slice 的0值是nil

29 append函数可以向slice添加元素。

func append(s []T, vs ...T) []T

第一参数,是原来的slice,返回的是一个原来的元素添加了新元素的slice。

30 range可以对slice或map进行循环,取到的第一个值是,元素的下标,第二个值是元素的值。

31 fmt.Println( 1 << uint(i) )

会返回2,4,6,8这样的一个二进制序列。

31 map 映射键到值。

Map使用之前需要使用make而不是new来创建,值为nil的map是空的,而且不能赋值。

type Vertex struct{
   Lat, Long float64
}

var m map[string]Vertex

func main(){
   m = make(map[string]Vertex)
   m["bell lab"] = Vertex{
      Lat:  100.2,
      Long: 1559.5,
   }
   fmt.Println(m)
}

上面的是string是键,Vertex是值。

32如果顶级的类型只有类型名的话,可以在文法的元素中省略键名。

33 map[key] = value 向map中插入或者修改一个元素。

34 delete(map,key)删除map中某个元素。这个元素被删除后,重新取这个元素,会显示这个元素类型的零值。

35 u,v =map[key] 第一u,显示的是这个元素的 值。如果元素被删除,则显示的是这个元素类型的0值。u表示这个元素是否存在,如果存在u显示为true,如果不存在显示为false。

36 函数也可以当作值。

37 go函数可以是闭包。闭包就是,可以读取函数内部局部变量的函数。

闭包就是能够读取其他函数内部变量的函数。

闭包使得函数中的变量一直在内存中,

https://www.cnblogs.com/cxying93/p/6103375.html

https://www.cnblogs.com/hzhuxin/p/9199332.html

38 斐波那契数列 :从第三项开始,之后的每一项都是前两项的和。

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

package main

import "fmt"

func fibonacci() func()int{
   x := 0
   y := 1
   return func() int {
      z := x + y
      x, y = y,z
      return z
   }
}

func main(){
   f := fibonacci()
   for i := 0 ;i < 10 ;i++  {
      fmt.Println(f())
   }
}

39 go 语言没有类,不过仍然可以在结构体类型上定义方法。

方法的接收者,放在 func 和方法名之间。

40 type 可以定义函数类型,结构体类型,接口类型,定义等价类型(相当于类型重命名)。

type 在switch中还可以进行类型查询。

https://blog.csdn.net/hzwy23/article/details/79890778

https://www.cnblogs.com/craneboos/p/8615476.html

41 可以对任意类型定义方法,而不仅仅针对结构体。

42 接口是一组方法的集合。

只要 这个方法的 fucname  result   arguement 和接口中的方法一直,就认为,这个方法实现了接口。

结构体是,实现方法的接收者。

43 类型通过实现接口的方法,实现接口。这样实现了接口和类型之间的解耦。

44 return fmt.Sprintf("%d.%d.%d.%d",i[0],i[1],i[2],i[3])

可以返回格式化之后的字符串。

45  return fmt.Sprintf("cannot Sqrt negative number: %v",float64(e))

上面这行,代码使用%v可以实现值的替换,可是使用%d没办法实现值的替换。看了下源码,没看完

46 io 包指定了 io.Reader 接口, 它表示从数据流结尾读取。

func (T) Read(b []byte) (n int, err error)

Read用数据填充指定的字节slice,并且返回填充的字节数,和错误信息。

在遇到数据的结尾时,io.eof错误。

47  golang 如何判断变量的类型

func main(){
   v := 'A'
   fmt.Println(reflect.TypeOf(v))
}

48  fmt.pringLn fmt.Fprint  fmt.Sprintf 的各种用法:

fmt.Fprint  格式化,并输出到io.writer

49Web 服务器

包http通过任何实现了http.Handler的值,相应HTTP请求。

50 goroutine 是go运行时环境的轻量级线程。

go  f(x,y,z) 开启了一个新的 goroutine 执行f(x,y,z)

X,y,z 是在当前线程中定义的,不过在新的goroutine中执行他们。

51 channal是有类型的管道,在正常情况下,在另一端装备好之前,发送和接受都会被阻塞,可以帮助goroutine实现同步。

Channal可以使用 <- 操作符,来发送或者接收变量。

Ch <- v

于map和slice一样,channel必须使用make创建。

Ch := make(chan int)

52 channel 可以带缓冲区,make 第二个参数作为一个缓冲区,来初始化一个channel。

M := make(chan int, 10)

向channel发送数据的时候,如果缓冲区已满,则会发生阻塞。如果缓冲区已空,从channel中取数据则会发生阻塞。

53  发送者,可以把channel关闭。向一个已经关闭的channel发送值会引发pannic。 Channel 和文件不同,通常情况下不需要关闭他们,只有在告诉接受这没有更多数据的时候,才有必要进行关闭,例如中断一个range

K ,ok := <-c 当channel已经没有值,并且已经被关闭的是偶,第二个ok会被赋值为false。

54 go 的select语句会监听io操作,当io操作发生时,触发相应的操作。

在执行Select语句的时候,运行系统会自动的自上而下的判断每个case中发送或者接收操作可以被立即执行。(立即执行的意思是,当前goroutine不会因操作而阻塞)。

如果有一个或者多个io操作可以执行,select会随机选择一个,否则,如果有defualt则执行defualt,如果defualt都没有则,select会一直等待。

参考文章:https://blog.csdn.net/dwjpeng2/article/details/81700147

go 指南学习笔记的更多相关文章

  1. HTTP权威指南-学习笔记

    目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...

  2. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...

  3. CSS权威指南学习笔记系列(1)CSS和文档

    题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...

  4. Hadoop权威指南学习笔记二

    MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...

  5. lua游戏开发实践指南学习笔记1

    本文是依据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1.  语言定义: 在lua语言中,标识符有非常大的灵活性(变量和函数名),只是用户不呢个以数字作为起始符 ...

  6. Hadoop权威指南学习笔记一

    Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...

  7. Hadoop权威指南学习笔记三

    HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...

  8. css权威指南学习笔记 —— css选择器

    1,选择器:选择器的一些基本常用规则基本都记得,w3c上都有,平时也常用,不常用的一些后代选择器经常就忘记了.一些归纳一下后代选择器,加深一下印象: a:子选择器:   p>a  a是直接是p的 ...

  9. maven权威指南学习笔记(三)——一个简单的maven项目

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

  10. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

随机推荐

  1. Flask框架 请求与响应 & 模板语法

    目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) F ...

  2. JavaWeb 之 Filter 验证用户登录案例

    需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...

  3. 使用Blynk打造一款物联网产品

    前言 一直以来想自己打造一款物联网产品. 围绕这个话题写过一些文章: 一辆树莓派可编程小车的问题 基于树莓派的积木化编程解决方案 物联网相关开源项目整理 物联网.开源硬件与开源社区 之前在一辆树莓派可 ...

  4. java-ExceptionHandler全局异常处理

    springmvc配置文件: <!-- 定义全局异常处理,只有一个全局异常处理器起作用 --> <bean id="exceptionResolver" clas ...

  5. 给 linux redis 设置密码

    在redis.conf 找到 下面添加一行: 这样的话,密码就可以设置成123456,然后重启redis就可以了.

  6. SQL Server行转列、不确定列的行转列

    本文使用的方法: 1.用Case When 2.PIVOT函数 首先,模拟一张表: -- 创建模拟数据 CREATE TABLE #TempSubjectResult ( StudentName NV ...

  7. LXC容器

    1.    LXC简述 Linux container是一种资源隔离机制而非虚拟化技术.VMM(VMM Virtual Machine Monitor)或者叫Hypervisor是标准的虚拟化技术,这 ...

  8. Android打包遇到的问题

    问题一 运行环境 引擎:Unity 4.3.4f1 安卓:Android 6 打包机的环境 出错堆栈 Unity version : 4.3.4f1 Caused by: java.lang.Unsa ...

  9. 变长数组(variable-length array,VLA)(C99)

    处理二维数组的函数有一处可能不太容易理解,数组的行可以在函数调用的时候传递,但是数组的列却只能被预置在函数内部.例如下面这样的定义: #define COLS 4 int sum3d(int ar[] ...

  10. Kotlin反射重要组件与流程详解

    继续学习Kotlin反射,我们知道对于Java的反射类是Class,而在Kotlin中的反射类是KClass,而在Java当中对于反射中的方法是用Method,而在Kotlin中是用KFunction ...