golang复习总结

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

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 = 有错误(失败)

  1. nil类似于其他语言中的 null,表示“无”“零值”
  2. nil预定义标识符,代表指针、接口、通道、函数、映射、切片零值
  3. 不能用于基本类型(如int、float、string等)
  1. int 的零值是0,float的零值是0.0,string的零值是"",基本类型有各自的零值,因此不能使用nil
  2. 不能将nil赋值给基本类型,也不能用nil来比较基本类型
  1. err != nil 为什么可以用nil作比较?
  1. 因为err是接口类型,而接口类型的零值是nil,所以我们可以用nil来比较。
  2. 错误处理中的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语言类型分类
  1. 值类型数值类型,bool,string,数组,struct结构体
    变量直接存储值,内存通常在栈中分配, 修改值, 不会对源对象产生影响
  2. 引用类型指针,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖坤超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值