Go基础语法-1 | 青训营笔记

133 阅读4分钟

Go基础语法-1 | 青训营笔记

Go 语言的设计目的是作为 C/C++ 的替代工具,是谷歌内部为了解决 C/C++ 开发中的一些痛点:编译慢、不受控制的依赖、三方库混乱、编程范式繁多(每个人都选择其中一部分特性)、并发编程麻烦、跨平台代码兼容、内存安全、工程开发效率低等等。

目录

  • <语言特点>
  • <基本类型>
  • <整体结构>
  • <变量和常量的声明>

语言特点

  1. 语法简单,易上手,语言新内容少,学习周期短
  2. 丰富标准库,完善的工具链,非常适合网络服务开发
  3. 静态编译,编译速度快
  4. 云原生+跨平台
  5. 异步线程
  6. 垃圾回收机制

基本类型

常用的基本类型:bool,int,float,struct,stringslicemapchannel

Golang 更明确的数字类型命名,支持 Unicode,支持常用数据结构,支持八进制、 六进制,以及科学记数法。

标准库 math 定义了各数字类型取值范围。

类型长度(字节)默认值说明
bool1false
byte10uint8
rune40Unicode Code Point, int32(相当于char[])
int, uint4或8032 或 64 位
int8, uint810-128 ~ 127, 0 ~ 255,byte是uint8 的别名
int16, uint1620-32768 ~ 32767, 0 ~ 65535
int32, uint3240-21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名
int64, uint6480
float3240.0
float6480.0
complex648复数
complex12816
uintptr4或8以存储指针的 uint32 或 uint64 整数
array值类型
struct值类型
string""UTF-8 字符串
slice(切片)nil引用类型(相当于一个动态窗口,优点是可以直接改变数组中的值)
mapnil引用类型
channel(通道)nil引用类型
interface(接口)nil接口
function(函数)nil函数

(在golang中nil有几种不同的含义,它代表了pointer, channel, func, interface, map 或者 slice 的zero value。nil值是有类型的,指针的nil值指向0x0)


语句结构

结构大致如下:

  1. main方法的包名必须是main

  2. 单行单句无需;

  3. 整体大致是:

    • 声明所属包名
    • 导入包
    • 主要内容
    • main方法
  package main
 ​
  import ("fmt")
  
  func main() {
    fmt.Println("Hello World!")
  }

变量的声明

基本语法:go是一个强类型的语言,声明变量必需可以让编译器推断出值的类型

  1. 直接声明
  var a int
  var a,b,c,d bool
  a = 1
  var s string//(默认为"")
  var a *int
  var a []int
  var a map[string] int
  var a chan int
  var a func(string) int
  var a error // error 是接口
  1. 类型推断(i

    赋值后自动判断类型

  var d = true
  var a,b,c = "a",false,322
  1. 类型推断(ii

    进一步简化,改用:=只需要写变量名,直接赋值后自动推断类型

  d := true
  s := "hello world"
  a,b,c := "a",false,322

(Tip: 如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明)


常量的声明

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

const

常量的声明只需要把var换为const

Go语言中的map基础类型

  const d = 2525
  const d int = 1324
  const a,b,c = "a",false,322

常量还可以用作枚举

  const (
      Unknown = 0
      Female = 1
      Male = 2
      b = "abc"
      a = len(b)
  )

其中只可以使用内置函数

iota

特殊的常量,可以认为是一个可以被编译器修改的常量。

iota在 const 关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

iota 可以被用作枚举值:

  const (
      a = iota //0
      b        //1
      c        //2
  )

实例:

  package main
  
  import "fmt"
  
  func main() {
      const (
              a = iota   //0
              b          //1
              c          //2
              d = "ha"   //独立值,iota += 1
              e          //"ha"   iota += 1
              f = 100    //iota +=1
              g          //100  iota +=1
              h = iota   //7,恢复计数
              i          //8
      )
      fmt.Println(a,b,c,d,e,f,g,h,i)
  }
  //结果:0 1 2 ha ha 100 100 7 8
 const (
     i=1<<iota
     j=3<<iota
     k
     l
 )
 //i= 1
 //j= 6
 //k= 12
 //l= 24

运算符除指针->和三目运算符部分外其他与c完全一致,**为乘方