Go语言基础语法(上)

113 阅读3分钟

一、简介

1.1 Go语言优势

Go语言优点众多

  1. 高性能、高并发
  2. 语法类似C语言,并且加以简化,学习周期更短
  3. 标准库极其丰富
  4. 工具链完善
  5. go语言是静态编译,只需要考虑编译后的一个可执行文件即可
  6. 编译速度快
  7. 跨平台,不仅支持Windows、mac、Linux,还可以用于ios、Android....
  8. 自带垃圾回收

二、入门

2.1 配置

vscode或者goland

2.2 基础语法

Hello World

 package main // 文件属于哪个包
 // 在 Go 语言中 main 包是一个特殊的包,代表你的 Go 语言项目是一个可运行的应用程序,而不是一个被其他项目引用的库。
 ​
 import "fmt" // 导包
 ​
 func main() { // 主函数
     fmt.Println("Hello World")
 }
 ​

三、数据类型

变量声明

有三种形式

 // 变量声明:var 变量名 类型 = 值
 var i int = 100
 ​
 // Go可以自动类型推导,声明时不需要再写变量类型
 var j = 99
 ​
 // 简洁类型
 m := 100

可以一次声明多个变量

 // 可以一次声明多个变量
 var (
     k = 19
     l = 12.678
 )

数据类型

基础数据类型

  • 整型: 有符号整型:如 int、int8、int16、int32 和 int64。 无符号整型:如 uint、uint8、uint16、uint32 和 uint64。
  • 浮点数: float32 float64
  • 布尔类型: bool
  • 字符串: string

指针

和其他语言类似,只是作用很小。只用来改变函数传进来的参数的值。

p := &i&用来取地址,*p 就等于 i

常量

定义

 const name = "Changersh"

注意:go语言中,只允许布尔型、字符串、数字类型这些基础类型作为常量。

iota

常量生成器

用来初始化相似规则的常量,避免重复的初始化。

 const(
 ​
     one = 1
 ​
     two = 2
 ​
     three =3
 ​
     four =4
 ​
 )
 ​
 // 和下面等价
 const(
 ​
     one = iota+1
 ​
     two
 ​
     three
 ​
     four
 ​
 )

字符串

互相转化

Go 语言是强类型的语言,也就是说不同类型的变量是无法相互使用和计算的。所以不同类型的变量在进行赋值或者计算前,需要先进行类型转换。

可以使用strconv包的函数,也可也强转

  • 函数方法:

     i := 100
     i2s := strconv.Itoa(i) // int to string
     s2i, err := strconv.Atoi(i2s) // string to int
    
  • 强转

     i2f := float64(i) // int 强转 float64
     f2i := int(i2f)   // float64 强转 int,小数部分直接舍弃掉
    

Strings包

用于处理字符串的工具包,里面有很多常用的函数,帮助我们对字符串进行操作,比如查找字符串、去除字符串的空格、拆分字符串、判断字符串是否有某个前缀或者后缀等。

更多函数请自行查阅api

 //判断s1的前缀是否是H
 fmt.Println(strings.HasPrefix(s1,"H"))
 ​
 //在s1中查找字符串o
 fmt.Println(strings.Index(s1,"o"))
 ​
 //把s1全部转为大写
 fmt.Println(strings.ToUpper(s1))

四、控制结构

if-else if

注意:

  1. 条件判断不用小括号。
  2. 必须要加 {} ,哪怕只有一条语句
  3. if else 后面的 { 不能独占一行,否则编译不通过
  4. 可以将赋值语句和判断语句写在一起,二者用 分号 ; 隔开if i:=6; i < 5{}
func main() {
    i:=6
    
    if i >10 {

    } else if  i>5 && i<=10 {

    } else {

    }
}

for

go语言循环语句只有 for 循环了。

  1. 基本语法: for i:=10; i <= 100; i++{}
  2. 但是以上三个部分都不是必须的,都可以省略
  3. go没有while循环,用 i:=10 提前声明变量,然后进行for循环 for i <= 100{},代替while
  4. 同样支持continue 和 break

switch

  1. switch同样可以将赋值语句直接写在开头,后面同样要使用 分号; 隔开

  2. switch中没有break语句,go语言会自带break

  3. 如下的fallthrough,即使进入了第一个条件,有了这个语句之后,即使不满足后面的条件,但依然执行fallthrough后面的语句 所以 fallthrough的作用就是,取消go语言自带的break效果,让后面的语句也可也被执行到

  4. 当 switch 之后有表达式时,case 后的值就要和这个表达式的结果类型相同,

    比如:j:=10;j 或者 j 这种,j就是表达式

// 最简单的情况,case表达式的值是任意的
switch i:=6;{
case i>10:
    fmt.Println("i>10")
case i>5 && i<=10:
    fmt.Println("5<i<=10")
default:
    fmt.Println("i<=5")
}
// 复杂情况,switch后面有个 j,则case表达式的值必须和 j 是同一数据类型
// fallthrough:取消go自带的 break 效果
switch j:=1;j {
case 1:
    fallthrough
case 2:
    fmt.Println("1")
default:
    fmt.Println("没有匹配")
}
  • 而对于 switch 后省略表达式的情况,整个 switch 结构就和 if……else 条件语句等同了。

    switch 后的表达式也没有太多限制,是一个合法的表达式即可,也不用一定要求是常量或者整数。