GO语言基础学习一------------基本语法与使用

Insane_linux · · 543 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

基本语法和使用

程序代码架构

  • 添加程序入口:package main
  • 导入程序所需要的包:import ()
  • 定义命令行参数:var mode = flag.Sting (”mode ”,“”,“ process mode ”)
  • 初始化函数:func init(){}
  • 执行函数/入口函数:func main (){}

变量

  • 声明变量

    • 标准格式:var 变量名称 变量类型

      如:
      var a int 整型
      var b string 字符串
      var c [) float32 浮点贴片
      var d func() bool bool类型函数(回掉函数)
      var e struct{ 结构体
      x int
      }

    • 批量:var ( 变量名称 变量类型 ......)
  • 初始化

    • 变量在声明时,编辑器会自动对于变量进行初始化,如:整型和浮点型默认为0,字符串默认为空字符串,布尔型为bool,其余为nil
    • 标准赋值:var 变量名称 变量类型 = value
    • 推倒式赋值:var 变量名称 = value (编辑器根据右边的值推倒变量的类型)
    • 短变量赋值(推倒式的简明写法): var 变量名称 := value
  • 匿名变量

    • 在使用多重赋值时,如果不需要在左值中接收变量 可以使用匿名变量。匿名变量用_表示
    • 如:函数返回多个值,只需要其中一个或者多个,可以将其余的返回值设置为匿名变量

      func GetData() (int ,int) {
      return 100 , 200
      }
      a , : = GetData()
      , b : = GetData()
      fmt . Println(a , b)

    • 特点

      • 不占用命名空间
      • 不分配内存
      • 可以多次重复使用

常量

  • const key 类型

数据类型

  • 整型

    • 长度整型:int8,int16,int32,int64
    • 无符号整型:uint8,uint16,uint32,uint64
  • 浮点型

    • float32:最大范围约为 3.4e38
    • float64: 最大范围约为 l.8e308
  • 字符串

    • 使用UTF-8编码
    • 单行定义: var str :=" "
    • 多行定义:var str := 可以在字符串中使用换行等操作
  • 字符

    • byte:表示ACSII,实际为int8
    • rune:表示UTF-8类型,实际为int32
  • 切片

    • 详见容器--切片
  • 输出字符类型:fmt.Printf( "%T\n" , a)

指针

  • 分类

    • 类型指针:允许对这个指针类型的数据进行修改。传递数据使用指针,而无须拷贝
      数据。类型指针不能进行偏移和运算。
    • 切片:由指向起始元素的原始指针、元素数量和容量组成。
  • 使用

    • &:对变量取地址
    • *:对指针取值
    • 定义指针变量:var name *类型
    • 定义指针变量2: var name= new(变量类型)

字符串的操作

  • 长度

    • ACSII:len(string)
    • UFT-8:utf8.RuneCountinString(string)
  • 遍历

    • ACSII:for i=0;i<len(string);i++
    • UTF-8: for , s := range string
  • 截取字符串

    • string[start:end]
    • 正向搜索:strings.Index(string,' ')
    • 反向搜索:strings.LastIndex(string,'')
  • 修改

    • 将字符串转化为字符串数组:StringBytes : = []byte(string)
    • 修改
    • 转化为字符串:string(StringBytes)
    • 特点

      • Go 字符串是不可变的。
      • 修改字符串时,可以将字符串转换为[]byte 行修改。
      • []byte 和白ing 可以通过强制类型转换互转。
  • 拼接

    • 方式一:使用+进行链接
    • 方式二:使用字节缓存StringBuilder

      • 声明字节缓存:var stringBuilder bytes .Buffer
      • 将多个字符串依次写进缓存中:stringBuilder . WriteString(string)
      • 转化为字符串:stringBuilder String( )
    • 方式三:使用join将多个字符串根据分隔符seq进行拼接

      • strings.Join(a []string, sep string) string
  • 格式化

    • 格式:fmt.Sprintf (格式化样式,string1...)
    • 格式化样式:“xxxx %d %v”
    • 格式化特定替代符

      • Xnip2020-09-21_16-26-16.jpg
  • 匹配

    • 包含字串:strings.Contains(string,substrinig) bool
    • 包含字串中的任意字符: strings.ContainsAny(s, chars string) bool
    • 不重复的字串个数:strings.Count(s, sep string) int
    • 字串第一次出现的位置,不存在为-1:strings.Index(s, sep string) int
    • 字串最后一次出现的位置,不存在为-1:strings.LastIndex(s, sep string) int
    • 字符出现的第一个位置,不存在为-1:strings.IndexByte(s string, c byte) int
    • utf-8字符出现的第一个位置,不存在为-1:strings.IndexRune(s string, r rune) int
    • Uft-8出现的最后一个位置:strings.LastIndexAny(s, chars string) int
  • 大小写转化

    • 大写:strings.ToUpper(s string) string
    • 小写:strings.ToLower(s string) string
  • 替换

    • 将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串
    • strings.Replace(s, old, new string, n int) string
  • 分割

    • strings.Split(s, sep string) []string

      • 如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串
    • strings.SplitN(s, sep string, n int) []string

      • 如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。参数n决定返回的切片的数目,小于0返回所有,等于0返回nil,大于0返回切片最多n个子字符串

类型别名

  • 格式1:type 类型别名 = 类型(该类型可以是变量类型,结构体,函数等)
  • 格式2: type 类型别名 类型

有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:Insane_linux

查看原文:GO语言基础学习一------------基本语法与使用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

543 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传