go初记录

一、概述

个人使用python语言工具时间最长,所以当前页面针对有python和c语言基础的,做触类旁通的学习,重点描述不同点语法和语言特性

二、详情

2.1 关键字

2.1.1 defer

延迟调用是在 defer 所在函数结束时进行,函数结束可以是正常返回时,也可以是发生宕机时。在单元测试场景中可和tearDown关联使用。

2.1.2 var

Go语言是静态类型语言,因此变量(variable)是有明确类型,var name type:var 是声明变量的关键字,name 是变量名,type 是变量的类型

声明两个指针:

var a, b *int

Go语言的基本类型有:

bool
string
int、int8、int16、int32、int64
uint、uint8、uint16、uint32、uint64、uintptr
byte // uint8 的别名
rune // int32 的别名 代表一个 Unicode 码
float32、float64
complex64、complex128

批量命名格式:

var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)

2.1.3 常量
常量的定义格式:

const identifier [type] = value

可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。

显式类型定义: const b string = "abc"
隐式类型定义: const b = "abc"
iota:可理解为 const 语句块中的行索引。他是特殊常量

2.1.4 range

在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对

2.1.5 map集合

无序的键值对的集合,使用hash表实现

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

delete() 用来删除集合中的元素

2.1.6 go

Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine

2.1.7 chan

通道channel:用来传递数据的一个数据结构

操作符 <- 用于指定通道的方向,发送或接收

声明一个通道很简单,我们使用chan关键字即可,通道在使用前必须先创建:

ch := make(chan int)
 
 
ch <- v    // 把 v 发送到通道 ch
v := <-ch  // 从 ch 接收数据
           // 并把值赋给 v

2.2 运算符

6类运算符:算、关系,逻辑、位,赋值、其他

其他中& 和 * 是单目运算符,其他多是双目运算符,go中没有三目运算符,所以不支持 ?: 形式的条件判断。

2.3 判断语句

if else 不提,switch在python中没有,在c和go中有,这个也不提,主要提select。

select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。

2.4 循环语句

循环语句,go中有for语句,不支持while。控制语句除了常规的break continue外,还有个goto关键字,重点关注。

goto :可以无条件地转移到过程中指定的行。

goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。

但是,在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。

2.5 默认值

不同类型的局部和全局变量默认值为:

int	0
float32	0
pointer	nil

2.6 字符串方法

需要借助strings库来处理字符串

strings.Count() :字符串统计

strings.Contains() :判断的结果为返回bool值

strings.EqualFold() :不区大小写自字母比较(区分使用"=="比较即可)

strings.Index():返回在字符串第一次出现的位置

strings.LastIndex() :返回在字符串最后出现的位置

strings.Replace(s, old, new, n):字符串替换 n表示替换次数,-1代表替所有

strings.Split(s, sep),sep表示以什么什么来拆分s字符串。

strings.ToUpper(s) :字符串大小写转换, 转大写,strings.ToLower(s)转小写

strings.Trim(s, cutset):去除两边指定字符去除,cutset代表要去除的两边字符。

strings.TrimSpace(s): 去除两边空格

strings.TrimLeft(s, cutset):将左边指定支符去掉。

strings.TrimRight(s, cutset):将右边指定支符去掉。

strings.HasPrefix(s, prefix):是否以prefix开头

strings.HasSuffix(s, suffix): 是否以suffix结尾

2.7 切片方法

在go中列表(python中list)概念不浓墨重笔,在这里更类似切片(Slice),切片是对数组的抽象。

Go 数组的长度不可改变,在特定场景不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),长度不固定的,在追加元素时可能使容量增大。

常用内置关联方法:len()cap()append()copy()

内置函数 make() 可初始化切片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值