Go学习日记1

1.变量、指针地址、指针变量、取地址、取值的相互关系和特性
解析:
[1]对变量进行取地址操作使用&操作符,可以获得这个变量的指针变量。
[2]指针变量的值是指针地址。
[3]对指针变量进行取值操作使用*操作符,可以获得指针变量指向的原变量的值。

2.使用Go语言访问JSON数据[gojsonq]
解析:

go get github.com/thedevsaddam/gojsonq
import "github.com/thedevsaddam/gojsonq"

3.Go 语言最主要特性
解析:
[1]自动垃圾回收
[2]更丰富的内置类型
[3]函数多返回值
[4]错误处理
[5]匿名函数和闭包
[6]类型和接口
[7]并发编程
[8]反射
[9]语言交互性

4.包名
解析:
[1]文件名与包名没有直接关系,不一定要将文件名与包名定成同一个
[2]文件夹名与包名没有直接关系,并非需要一致
[3]同一个文件夹下的文件只能有一个包名,否则编译报错

5.标识符
解析:标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母[A~Z和a~z]数字[0~9]、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

6.Go关键字
解析:Go代码中会使用到的25个关键字或保留字:
break,default,func,interface,select,case,defer,go,map,struct,chan,else,goto,package,switch,const,fallthrough,if,range,type,continue,for,import,return,var。

7.Go标识符
解析:Go语言还有36个预定义标识符:
append,bool,byte,cap,close,complex,complex64,complex128,uint16,copy,false,float32,float64,imag,int,int8,int16,uint32,int32,int64,iota,len,make,new,nil,panic,uint64,print,println,real,recover,string,true,uint,uint8,uintptr。

8.Go语言数据类型
解析:
[1]布尔型:布尔型的值只可以是常量true或者false。一个简单的例子:var b bool=true。
[2]数字类型:整型int和浮点型float32、float64,Go语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
[3]字符串类型:字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。
[4]派生类型:指针类型[Pointer],数组类型,结构化类型[struct],Channel类型,函数类型,切片类型,接口类型[interface],Map类型。

9.Go部分数字类型
解析:
[1]byte:类似uint8
[2]rune:类似int32
[3]uint:32或64位
[4]int:与uint一样大小
[5]uintptr:无符号整型,用于存放一个指针

10.Go语言常量
解析:常量中的数据类型只可以是布尔型、数字型[整数型、浮点型和复数]和字符串型。

11.Go语言运算符
解析:
[1]算术运算符
[2]关系运算符
[3]逻辑运算符
[4]位运算符
[5]赋值运算符
[6]其它运算符
说明:
[1]要注意运算符的优先级
[2]Go没有三目运算符?:

12.Go自增和自减
解析:Go的自增,自减只能作为表达式使用,而不能用于赋值语句。

a++ // 这是允许的,类似a = a + 1,结果与a++相同
a-- // 与a++相似
a = a++ // 这是不允许的,会出现变异错误syntax error: unexpected ++ at end of statement

13.Type Switch
解析:switch语句还可以被用于type-switch来判断某个interface变量中实际存储的变量类型。

14.fallthrough
解析:使用fallthrough会强制执行后面的case语句,fallthrough不会判断下一条case的表达式结果是否为true。

15.Go语言Channel <-箭头操作符
解析:Channel是Go中的一个核心类型,可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯。

ch <- v    // 发送值v到Channel ch中
v := <-ch  // 从Channel ch中接收数据,并将数据赋值给v

16.Go语言select语句
解析:select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。
[1]每个case都必须是一个通信
[2]所有channel表达式都会被求值
[3]所有被发送的表达式都会被求值
[4]如果任意某个通信可以进行,它就执行,其他被忽略。
[5]如果有多个case都可以运行,Select会随机公平地选出一个执行。其它不会执行。否则:如果有default子句,则执行该语句;如果没有default子句,select将阻塞,直到某个通信可以运行,Go不会重新对channel或值进行求值。
说明:select会循环检测条件,如果有满足则执行并退出,否则一直循环检测。

17.ChannelType = ( “chan” | “chan” “<-” | “<-” “chan” ) ElementType
解析:可选的<-代表channel的方向。如果没有指定方向,那么Channel就是双向的,既可以接收数据,也可以发送数据。

chan T          // 可以接收和发送类型为T的数据
chan<- float64  // 只可以用来发送float64类型的数据
<-chan int      // 只可以用来接收int类型的数据

说明:<-总是优先和最左边的类型结合。

18.For-each range循环
解析:这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。

package main
import "fmt"

func main() {
	strings := []string{"google", "run"}
	for i, s := range strings {
		fmt.Println(i, s)
	}
}

19.Go语言goto语句
解析:
[1]Go语言的goto语句可以无条件地转移到过程中指定的行
[2]goto语句通常与条件语句配合使用。可用来实现条件转移,构成循环,跳出循环体等功能
[3]在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难

20.Go语言函数
解析:

func function_name( [parameter list] ) [return_types] {
   函数体
}

[1]func:函数由func开始声明
[2]function_name:函数名称,函数名和参数列表一起构成了函数签名。
[3]parameter list:参数列表,参数就像一个占位符,当函数被调用时,可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
[4]return_types:返回类型,函数返回一列值。return_types是该列值的数据类型。有些功能不需要返回值,这种情况下return_types不是必须的
[5]函数体:函数定义的代码集合

21.Go函数引用传递值
解析:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

22.Go语言函数方法
解析:Go语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。语法格式如下:

func (variable_name variable_data_type) function_name() [return_type]{
   /* 函数体*/
}

下面定义一个结构体类型和该类型的一个方法:

package main
import (
	"fmt"
)

/* 定义结构体 */
type Circle struct {
	radius float64
}

func main() {
	var c1 Circle
	c1.radius = 10.00
	fmt.Println("圆的面积 = ", c1.getArea())
}

//该method属于Circle类型对象中的方法
func (c Circle) getArea() float64 {
	// c.radius即为Circle类型对象中的属性
	return 3.14 * c.radius * c.radius
}

23.Go全局变量
解析:在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包[被导出后]使用。

24.Go初始化局部和全局变量
解析:不同类型的局部和全局变量默认值为:
[1]int:0
[2]float32:0
[3]pointer:nil

25.Go空指针
解析:
[1]当一个指针被定义后没有分配到任何变量时,它的值为nil
[2]nil指针也称为空指针
[3]nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值
[4]一个指针变量通常缩写为ptr
说明:声明整型指针数组var ptr [MAX]*int;

参考文献:
[1]Command go:https://golang.google.cn/cmd/go/
[2]Go语言Channel <-箭头操作符详解:https://studygolang.com/articles/12745?fr=sidebar

发布了400 篇原创文章 · 获赞 423 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/shengshengwang/article/details/104454824