• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【Go】Go语言基础

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  1. Go语言string/byte/rune区别

    • string底层是用byte数组存储的,并且是不可改变的
      例如s := “Go编程” len(s) = 8,因为Unicode中文字符占3个字节
    • len(string(rune(“编"))) 结果是3,说明string中有Unicode中文字符用3byte存储
    • len([]rune(“Go编程”)) 结果是4,rune可以切片,并不是按照Unicode 3个字节存储中文
  2. go基础

    • := 取代了var type,为简短声明。只能在函数内部使用,一般用var声明一个全局变量
    • _ 下划线变量是一个特殊的变量,任何赋予它的值都会被丢弃
    • const name = value 声明一个常量
    • go的字符串都是采用utf-8编码,go的字符串是不可改变的。如果要改变字符串可以通过转成byte数组实现
    • go 默认2个行为
      • 大写字母开头的变量是可导出的,其它包可以读取,公有变量。小写字母是私有变量
      • 大写字母开头的函数是公有函数,小写字母开头的函数是私有函数
    • array: 静态数组, slice: 动态数组, 使用和array类似修改底层array
    • make用来对map,slice,channel内存分配, new用来对各种类型内存分配
      make返回一个T类型,new返回一个*T指针
    • go有两个保留函数main和init, go程序会自动调用main和init函数。程序的起始和初始化都在main包
  3. go底层数据存储结构

  4. main包初始化过程

  5. interface

    • 空的interface (interface{}) 可以存储任何类型的数值,类似C语言的void* 指针
    • 空的interface做为函数参数的时候,函数可以接收任何类型的值。如果函数返回空的interface,那也可以返回任何类型的值
    • 某个类型需要fmt以特殊的格式输出,必须要实现Stringer这个接口,否则将以默认的方式输出
    • value, ok = element.(T), 可以用来判断一个对象element是否是T类型。element是一个空interface对象,value是数值,ok是返回值。例如value,ok = e.(int)
  6. 并发

    • goroutine是并发的核心
    • goroutine实际上是协程,但是比线程更小,十几个goroutine差不多等于五六个线程
    • channel可以用goroutine之间通信,必须使用make创建channel。默认情况下 channel的接收和发送都是阻塞的,所以goroutine的同步比较简单,不需要显示的lock
    • 可以通过range不断读取channel的数据,直到有显式的close
  7. go 25个关键字

    • var和const参考2.2Go语言基础里面的变量和常量申明
    • package和import 包相关声明和导入
    • func 用于定义函数和方法
    • return 用于从函数返回
    • defer 用于类似析构函数
    • go 用于并发
    • select 用于选择不同类型的通讯
    • interface 用于定义接口,参考2.6小节
    • struct 用于定义抽象数据类型,参考2.5小节
    • break、case、continue、for、fallthrough、else、if、switch、goto、default这些参考2.3流程介绍里面
    • chan用于channel通讯
    • type用于声明自定义类型
    • map用于声明map类型数据
    • range用于读取slice、map、channel数据
  8. json

    • struct 转json
      • 只有大写字母的字段才能够被导出
      • 字段的tag是“-”的是不会被输出到json中
      • tag中有自定义名称,则json中会以该名称做为key
      • tag中如果有omitempty,则该字段为空值的时候不会输出到json
    • json转struct
      • 能够被赋值的字段必须是 大写字母开头的字段,否则无法赋值
      • json序列化的时候只会对能找到的字段进行赋值,找不到的字段不管(有个好处就是json里面有各种字段,但是我们只需要某几个字段的时候就只需要定义某几个字段的struct)

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go专家编程发布时间:2022-07-10
下一篇:
go panic (runtime error: slice bounds out of range) 分析发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap