Go语言学习

语法基础

变量、常量

const var = 1
const (
var = 1
)

字符串

  • Go语言字符串为任意字节常量序列
  • UTF-8编码,变宽字符序列。而Java的String、C++的std::strin都是定宽的
  • 可使用 ==、!=、>=、<=、>、<比较字符串,底层会在内存中逐字节比较字符串
  • 可直接转成 []runeunicode切片(rune是int32的别名)
  • 可使用 ` 和 ” 创建

    双引号创建可解析字符串,支持转义序列,不支持多行
    反引号创建原生字符串,不支持转义序列,支持多行,可包含除了反引号之外的任意字符

  • 可使用 for range循环

    for idx, rune range str {
     ....
    }
  • Go语言字符串底层就是增强型的 []byte ,所以 []byte(string) string([]byte) 只需要O(1),无需复制
  • 对于只包含7位ASCII字符的字符串,可以直接用string[idx]索引字符;而对于包含非ASCII字符的字符串,需要转换成[]rune(string)再索引
  • strings.IndexFunc(string, indexFunc)可使用自定义方法查询index,如unicode.IsSpace来查询任意空白符的位置
  • strings.FieldsFunc(string, func(rune) bool) 遍历string中rune,如果匿名函数返回true则进行拆分

集合类型

值、指针和引用类型

  1. 指针
    • Go指针类似C、C++,区别是不能参与指针计算
    • Go不需要显示free内存,本身具备垃圾回收器
    • 对布尔、数值、字符串类型,传递给方法和函数时使用了值传递,且无论字符串长度如何,代价都很小。但是如果函数内部修改了字符串,那么将会生成一份副本,这个代价可能比较大
    • new() 函数返回的是指针 同 取址操作符 &
type test struct {
   
id int64
}

hello := new(test)
hello.id = 2
  • Go支持大括号直接初始化对象
  • Go语言的 . 操作符,会直接解引用指针,无需再显示使用 * 解引用

    1. 引用类型
  • 映射、切片、通道、函数、方法都是引用类型

数组

  • 长度固定,不可修改
  • 声明与初始化(未被显示初始化的元素,值会初始化位0值)
[length]Type
[N]Type{value1, value2, ...}
[...]Type{value1, value2, ...}

切片

  • 创建,二三四长度等于容量
make([]Type, length, capacity)
make([]Type, length)
[]Type{}
[]Type{value1, value2, ...}
  • 切片的重新切片 与 原切片都是对同一个底层数组的引用
  • for range循环中,直接修改range参数中的当前元素,会包 ineffectual assignment错误。
for _, amount := range amounts {
        amount = amount * 2
    }

正确修改方式如下

for i := range amounts {
amounts[i] xxxxx
}
  • append函数 返回新切片(…代表 将切片元素全部取出转成数组)
    append(slice1, slice2[idx:]...)

映射

  • 键唯一,且必须支持 == 与 != 操作
  • 基本类型、可比较的数组、结构体以及基于这些类型的自定义类型都可以作为键
  • 创建方式
 make(map[KeyType] ValueType, initialCapacity)
 make(map[KeyType] ValueType)
 map[KeyType] ValueType{}
 map[KeyType] ValueType{key1: value1, ...}
  • 支持for range遍历
  • 查询,可以通过判断found来知晓是否存在键,但通过值无法判断,因为不存在就返回零值
    value, bFound := map[key]
  • 删除
    d
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值