go语言基本语法介绍

本节,重点介绍go语言的基本语法...

Package

  • go程序是由一些列包组成的
  • 程序的运行启动点在main包中的main方法
  • 包通过imort关键字进行导入
  • 为了方便起见,包定义的名称和导出路径的最后一个路径元素名称一致,换句话说包路径的最后一个文件目录下,包含一些列该包名的go文件

例如import  "math/rand",可以看到rand目录下的go文件的package包名都是rand

go语言基本语法介绍_第1张图片

 import

通过import关键字实现包的引入,有两种方式:分解组合导入;多个import分别导入,推荐使用分解组合导入的形式

//组合形式,推荐使用
import (
	"fmt"
	"math"
)

//多import分别导入,不推荐使用
import "fmt"
import "math"

exported names

  • 在代码中,以大写字母开头的元素、方法都是被默认导出的。被导出名可以在其他包中进行调用
  • 非导出名的方法、属性是无法被引用到的

function

  • 函数可以有一个或多个参数,也可以有一个或多个返回值
  • 类型出现在变量的后面
  • 再有多个相同类型的变量定义时,可以省略前边的类型,只在最后定义类型
//多参数
//多返回值
//参数类型相同,可省略前面的类型定义
func compute(x,y int)(int,int)  {
	return y,x
}

Named return values

  • function函数中,是可以指定返回值的,即return后不加任何参数
  • 指定返回值,也称为无修饰返回值,需要在方法签名后指定要返回的值
  • 一般不会用在功能复杂的长函数中,不容易阅读,可读性不好
//指定返回值a,b
func swap(x int,y int)(a,b int)  {
	a = x
	b = y
	return
}

Variables

  • var关键字定义弱类型的变量,通过var 语句,可以定义一个参数列表,同方法签名处的参数一样,类型也是放在参数的后面
  • var 可以定义在包级别,也可以定义在方法级别
package main

import "fmt"

//包级别,多参数定义,类型在最后
var c, python, java bool

func main() {
	//函数级别
	var i int
	fmt.Println(i, c, python, java)
}

Variables with initializers

  • var声明的变量,可以为每一个变量初始化初始值
  • 如果初始值存在,type类型是可以省略的,变量自动采用初始化值的类型
// 不省略类型的初始值
var i ,j int = 0,1

func test() {
	//省略类型的初始值,自动采用初始值的类型
	var c, python, java = true, false, "no!"
	fmt.Println(i,j,c,python,java)
}

 

Short variable declarations

  • 可以使用短变量定义语法,“ := ”的语法,取代var定义变量的形式
  • 但是短变量定义,也只能用在方法体内部,在方法外每一个语句都必须以function或者var开头,因此在方法外,短语句定义是不可用的
//无效定义,包层级定义短变量出错
k := 1
func shortVariables()  {
	//短变量定义在函数体内
	i,j := 0,1
	fmt.Println("i: " ,i," j: ",j)
}

Go basic Type 基本类型

  • bool
  • string
  • int  int8  int16  int32  int64
  • uint uint8 uint16 uint32 uint64 uintptr
  • byte // 同unit8,是unit8的别名
  • rune // 同int32,是int32的别名
  • float32 float64
  • complex64 complex128

注意点,int、unit、unitptr在32位操作系统上是32位,在64位操作系统上是64位,当我们需要定义整数类型时,一般默认使用int类型即可,除非我们需要特定大小或者无符号类型的整数类型。

Zero value(初始化零值)

定义的变量,在没有给定严格的初始化值的时候,默认的初始值为“0”值

  • 数值类型的默认值为0
  • 字符串类型默认0值为“”
  • bool类型默认为false

Type conversion 类型转换

  • 类型转换的语法为 T(v),T为要转的类型,v为具体的值
  • 不同于C语言可以去掉T类型,go是不能去掉强制转换类型T的,具体说明可以看以下示例

go语言基本语法介绍_第2张图片

type inference 类型推导

类型推导:不论是使用 := 的语法定义变量,还是使用var 的语法定义变量,变量的类型都是依赖等号右侧的值的类型,因此有两种推导方式

  • 当右侧的变量的类型是被定义好时,该变量的类型就是右侧变量的类型
  • 当右侧的变量是没有被定义类型的符号数值类型时,则该变量的类型会根据右侧数值的精度进行推导,有可能是int,string,bool,或者complex类型
func typeInference()  {

	var i int = 1
	//j右侧的i确定了类型
	var j = i


	//右侧为数值类型
	k := 0
	z := "0"

	fmt.Printf("j type: %T\n k type: %T\n z type : %T\n ",j,k,z)
}

Constants 常量定义

  • 常量的定义使用使用const关键字
  • 可以定义在包级别,也可以定义在方法体内
  • 常量可以是各种类型:字符、字符串、bool、数值类型等
  • 不能使用":="短变量定义的语法

go语言基本语法介绍_第3张图片

Numeric Constants 数值常量

  • 数值常量都是高精度类型的
  • 在没有指定类型的常量定义时,要根据上下文进行类型推导。
//数值类型,没有指定具体类型
const BIG  = 1<<100
const SMALL  = BIG >> 99

func numericConstants()  {
	//small int类型
	needInt(SMALL)
	//small 上下文推导float类型
	needFloat(SMALL)
	needFloat(BIG)

}
func needFloat(x float32)  {
	fmt.Println(x)
}

func needInt(x int)  {
	fmt.Println(x)
}

到这里,我们已经学完了go语言的基本相关语法,后续将学习流程控制语法

你可能感兴趣的:(从0到1学习golang,golang,go语言,go)