语言基础

83 阅读2分钟

helloworld

package main    // 包名,当前文件属于哪个包
import (
    "fmt"
    "math"
)    // 导入包func main(){    // 每一个go项目都必须有一个main方法作为程序入口,如果有init()先执行init()
    fmt.Printf("Hello World")  
}

细节

导入必须调用,也可设置只导入不调用:

  • import _ "math" // 下划线表示匿名导入
    

禁止循环导入 包A导入了包B,包B也导入了包A

导出:想要对外暴露一个函数或者一个变量,只需要将其名称首字母大写即可

  • package e
    import "fmt"
    func Say() {
        fmt.Println("Helold")
    }
    
  • package main
    import (
        "demo/src/main/e"
        "fmt"
    )
    func main() {
        fmt.Println("Hello World")
        e.Say()
    }
    

标识符命名

  • 只能由字母,数字,下划线组成
  • 只能以字母和下划线开头
  • 严格区分大小写
  • 不能与任何已存在的标识符重复,即包内唯一的存在
  • 不能与Go任何内置的关键字冲突

变量

声明

  • int和float默认值是0
  • string默认""
var a int
var b float32
var c float32, d float64
var c, d float64  //c、d类型相同可只写一个

赋值

e, f := 9, 10    //不能写变量类型;必须使用否则报错
var g = "Ricardo"  //自动推导变量类型

匿名变量

在赋值后,会被立即释放

func main() {
  // 调用函数,仅仅需要第二个返回值,第一,三使用匿名变量占位
  _, v, _ := getData()
  fmt.Println(v)  //4
}
func getData() (int, int, int) {
  // 返回3个值
  return 2, 4, 8
}

全局变量

函数外部的变量

常量

x const XXX = "xxxx"

判断

func pow(x, n, lim float64) float64 {
    v := math.Pow(x, n)
    if v < lim {
        return v
    }
    return lim
}

循环

func main() {
    sum := 0
    for i := 0; i < 10; i++ {
        sum += i
    }
    fmt.Println(sum)
    for {} //无限循环
    
}

数组

声明

var a [10]int

切片

  • 切片并不存储任何数据,它只是描述了底层数组中的一段。
  • 更改切片的元素会修改其底层数组中对应的元素。
  • 与它共享底层数组的切片都会观测到这些修改
b := a[low : high]  //包含从下标low到high-1的元素
b[0] = 1  //a[low] = 1