01-数据类型之引用类型之指针 1、指针1.1、指针的创建Go 保留了指针,代表某个内存地址,默认值为 nil,使用 & 取变量地址,通过 * 访问目标对象。 简单示例: 12345var a int = 10fmt.Println("&a=", &a) // 0xc000096008 一个十六进制数var p *int = &afmt.Println("*p=", *p) // 10 2024-12-02 Go #Go
01-数据类型之引用类型之集合 1、集合 map1.1、map 的创建Go 内置了 map 类型,map 是一个无序键值对集合(也有一些书籍翻译为字典)。 普通创建: 123// 声明一个map类型,[]内的类型指任意可以进行比较的类型 int指值类型m := map[string]int{"a":1,"b":2}fmt.Print(m["a"]) make 方式创建: 1234567891011121 2024-12-02 Go #Go
01-类型转换与别名 1、数据类型转换1.1、显式转换Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Go 中数据类型不能自动转换。 1.2、数值类型转换123var i int32 = 100var n1 float64 = float64(i)fmt.Printf("n1=%v", n1) //输出100 注意:在转换中,比如将int64转成int8【-128---127】,编译时不会报错,只是转换的结果是 2024-12-02 Go #Go
02-变量 1、变量声明Go 变量声明的三种方式: 123var a int // 声明一个变量,默认为0var b = 10 // 声明并初始化,且自动推导类型c := 20 // 初始化,且自动推导 注意: :=定义变量只能在函数内部使用,所以经常用var定义全局变量 Go 对已经声明但未使用的变量会在编译阶段报错:** not used Go 中的标识符以字母或者下划 2024-12-02 Go #Go
02-常量 1、常量常量:在编译阶段就确定下来的值,程序运行时无法改变。 定义方式: 123const A = 3const PI float32 = 3.1415const mask = 1 << 3 //常量与表达式 错误写法:常量赋值是一个编译期行为,右边的值不能出现在运行时才能得到结果的值。 1const HOME = os.GetEnv("HOME") 2、无类型常量 2024-12-02 Go #Go
03-流程控制 1、流程控制之-条件语句1.1 判断语句 if1.1.1 if123if 布尔表达式{ /*在布尔表达式为true时执行*/} if 的特殊写法: 12if err := Connect(); err != nil { // 这里的 err!=nil 才是真正的if判断表达式} 1.1.2 if ... else12345if 布 2024-12-02 Go #Go
04-运算符 1、运算符1.1、运算符汇总123456算术运算符: + - * / % ++ -- 关系运算符: == != <= >= < > 逻辑运算符: ! && ||位运算: &(按位与) |(按位或) ^(按位取反) <<(左移) >>(右移)赋值运算符: = += -= *= /= %= <<= >> 2024-12-02 Go #Go
05-函数之闭包 1、闭包(Closure)1.1、闭包概念闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使己经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。 简单的说:函数+引用环境=闭包 贴士:go 的闭包在某些编程语言中也被称为 闭包(如 Python) 在闭包中可以修改引用的变量: 123456str := "hello"foo := func() 2024-12-02 Go #Go
05-函数简介 go 函数不支持默认值 1、函数1.1、函数声明函数声明格式: 1234func 函数名字(参数列表) (返回值列表){ // 函数体 return 返回值列表} 注意: 函数名首字母小写为私有,大写为公有; 参数列表可以有0-多个,多参数使用逗号分隔,不支持默认参数; 返回值列表返回值类型可以不用写变量名 如果只有一个返回值且不声明类型,可以省略返回值列表与括号 如果 2024-12-02 Go #Go
06-反射使用 https://golang.org/pkg/reflect/ 1、介绍Go 语言实现了反射。我们一般用到的包是reflect包,反射包中有两对非常重要的函数和类型,两个函数分别是: 方法名 描述 reflect.TypeOf 可以获得任意值的类型对象,返回类型:reflect.Type reflect.ValueOf 可以获得任意值的值对象,返回类型:reflect.Valu 2024-12-02 Go #Go
06-反射概述 1、反射概述 反射是指 在程序运行期对程序本身进行访问和修改的能力。即可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind),如果是结构体变量,还可以获取到结构体本身的信息(字段与方法),通过反射,还可以修改变量的值,可以调用关联的方法。 程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可 2024-12-02 Go #Go
07-channel channel 是 Go 语言中的一个 核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。 channel 是一个数据类型,主要用来解决 Go 程的同步问题以及 Go 程之间数据共享(数据传递)的问题。 goroutine 运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine 奉行通过通信来共享内存,而不是共享内 2024-12-02 Go #Go
11-面向对象之三大特性 1、面向对象三大特性1.1、封装封装:把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法),才能对字段进行修改,其作用有: 隐藏实现细节 可以对数据进行验证,保证安全合理 Go 对面向对象做了极大简化,并不强调封装特性,下列示例进行模拟实现: 在 person 包下新建 person.go 文件: 1234567891011121314151617 2024-12-02 Go #Go
11-面向对象之构造函数与方法 1、面向对象初识1.1、模拟构造函数Go 和传统的面向对象语言如 Java 有着很大区别。结构体没有构造函数初始化功能,可以通过以下方式模拟: 123456789101112131415161718192021type Person struct { Name string Age int}func NewPersonByName(name string) *Person 2024-12-02 Go #Go
12-面向对象之接口的使用 1、接口 interface接口是调用方和实现方均需要遵守的一种约束,约束开发者按照统一的方法命名、参数类型、数量来处理具体业务。实际上,接口就是一组没有实现的方法声明,到某个自定义类型要使用该方法时,根据具体情况把这些方法实现出来。接口语法: 12345type 接口类型名 interface { 方法名1(参数列表) 返回值列表 方法名2(参数列表) 返回值列表 ...} 2024-12-02 Go #Go
12-面向对象之断言与多态 1、断言接口是编程的规范,他也可以作为函数的参数,以让函数更具备适用性。在下列示例中,有三个接口动物接口、飞翔接口、游泳接口,两个实现类鸟类与鱼类: 鸟类:实现了动物接口,飞翔接口 鱼类:实现了动物接口,游泳接口 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 2024-12-02 Go #Go
13-泛型简解 1、泛型泛型是一种独立于所使用的特定类型的编写代码的方法。使用泛型可以编写出适用于一组类型中的任何一种的函数和类型。 2、泛型的语法Go 语言不是主流的面向对象,泛型支持上也有所区别,如Java一切皆为对象,只要确定对象泛型即可统一的泛型模式。Go的每种类型都有区别,可简单分为两类, 类型泛型:切片泛型、哈希泛型、结构体泛型、基础类型泛型等; 函数泛型:函数泛型、方法泛型等。 另外泛型语法不是 2024-12-02 Go #Go
13-泛型详解(转载) 序2022年3月15日,争议非常大但同时也备受期待的泛型终于伴随着 Go1.18 发布了。 1、一切从函数的形参和实参说起假设我们有个计算两数之和的函数 123func Add(a int, b int) int { return a + b} 这个函数很简单,但是它有个问题——无法计算int类型之外的和。如果我们想计算浮点或者字符串的和该怎么办?解决办法之一就是像下面 2024-12-02 Go #Go
Go 保留字之 iota iota关键字 iota 声明初始值为0,每行递增 1。 123456789101112131415161718const ( a = iota // 0 b = iota // 1 c = iota // 2)const ( d = iota // 0 e // 1 2024-12-01 Go > Go 关键字 #Go #Go 关键字
Go 关键字之 import 作用Go 中 import 用于导入包。导入之后就可以使用包中的代码。 用法1234567891011import ( // _ 匿名导包,导入但是不使用,不会报错。(默认情况下 Go 如果导包了而不使用,会报错) // Go 在引入包时会调用包的 init 方法。所以使用 _ 操作,主要是为了使用包的 init 函数,一般用在数据库方面的包中 _ "GolangStudy/5_init/lib1 2024-12-01 Go > Go 关键字 #Go #Go 关键字