Go安装包下载:https://go.dev/dl/
Go资源包搜索:https://pkg.go.dev/
在Windows环境下编译golang程序的时候提示:
"gcc"不是内部或外部命令,也不是可运行的程序或批处理文件”
这就很烦了,但是可以安装MinGW-w64编译器解决这个问题。
下载连接:https://sourceforge.net/projects/mingw-w64/files/
下载seh
恶心的 Error 处理if err != nil { //有错误(失败) return err //有错误(失败) }
err != nil=有错误(失败)
nil类似于其他语言中的null,表示“无”或“零值”nil是预定义的标识符,代表指针、接口、通道、函数、映射、切片的零值不能用于基本类型(如int、float、string等)
int 的零值是0,float的零值是0.0,string的零值是"",基本类型有各自的零值,因此不能使用nil不能将nil赋值给基本类型,也不能用nil来比较基本类型
err != nil 为什么可以用nil作比较?
因为err是接口类型,而接口类型的零值是nil,所以我们可以用nil来比较。错误处理中的err是一个接口变量,所以可以用nil比较。可以用 nil 的类型
var p *int = nil // 指针 var i interface{ } = nil // 接口 var c chan int = nil // 通道 var f func() = nil // 函数 var m map[string]int = nil // 映射 var s []int = nil // 切片不能用 nil 的基本类型
var i int = nil // ❌ 编译错误 var str string = nil // ❌ 编译错误 var b bool = nil // ❌ 编译错误 var f float64 = nil // ❌ 编译错误 // 判断也不行 if i == nil { } // ❌ 编译错误 if str == nil { } // ❌ 编译错误基本类型的零值
var i int // 0 var str string // "" var b bool // false var f float64 // 0.0 // 应该这样判断 if i == 0 { } if str == "" { } if !b { } if f == 0.0 && f < 1 && math.Abs(f) < 1e-9 // 更安全的比较(避免浮点精度问题)
记住: nil 只用于引用类型,另外基本类型有自己的零值!
golang保留字
一. 关键字(25个)
1. 程序声明import 导入 package 包
2. 程序实体声明和定义chan 通道 var 变量声明 const 常量声明 func 用于定义函数和方法 interface 定义接口 map 字典/map struct 定义数据类型 type 类型声明
3. 程序流程控制for break continue select 选择流程 switch case default defer 标识在函数退出之前执行 if else go 用于并行 goto fallthrough 强制执行后面的case, 不能用在switch的最后一个分支。 range 遍历读取slice,map, channel数据 return 用于从函数返回
二. 内建常量(4个)true false iota nil //iota 是常量计数器, 使go的常量自增
三. 内建类型(20个)int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error
go语言
类型分类:
值类型:数值类型,bool,string,数组,struct结构体
变量直接存储值,内存通常在栈中分配, 修改值,不会对源对象产生影响引用类型:指针,slice切片,管道chan,map,interface
变量存储的是一个地址,这个地址对应的空间才真正存储数据值,内存通常在堆上分配,当没有任何变量引用这个地址时,该地>址对应的数据空间就成为一个垃圾,由GC来回收,同时,当地址指向的数据值改变时,会对源对象产生影响。
四. 内建函数(13个)make len cap new append copy close delete complex real imag panic recover
Golang语言中的单引号和双引号的区别:
''用于表示字符类型
""用于表示字符串类型
函数定义的基本语法func 函数名(形参 类型,形参 类型)(返回值 类型){ 执行语句 }
1. func可以当参数传递
func mytype1(num1 int, num2 int)int{
}
func mytype2(n1 func(int,int)int, num1 int, num2 int){
}
fun main(){
num1 := 1
num2 := 2
mytype2(mytype1,num1,num2)
}
2. 可变参数
func args1(args... int){
fmt.Println(args)
}
func main(){
args1(1,2,3,4)
}
args是一个切片类型的数据
当你的包里面定义了一个init函数时,init会在main函数之前被调用
3. 匿名函数细节
func (n1 int, n2 int)int{
return n1 + n2
}(n1,n2)
或
a := func (n1 int, n2 int)int{
}(n1,n2)
4. 闭包
func Addupper()func(int,int)int{
return func(n int,n2 int)int{
return n

本文详细介绍了Golang的特性,包括变量、数组、切片、函数、接口、协程和并发处理。讨论了Go语言中引用类型与值类型的差异,强调了远程Debug、变量默认值以及如何在HTTP请求中使用协程。还提到了如何处理并发HTTP请求和数据库查询,利用协程池优化性能。


被折叠的 条评论
为什么被折叠?



