Go语言学习历程——Go语言基础语法入门

GO语言特性

开发者使用编程语言的三大分类(执行速度,简易程度,开发难度)

1.执行速度快、编译速度慢(编译型):C,C++

2.执行速度较慢,编译速度快(解释型):JAVA,.NET

3.执行速度慢,开发难度小(动态脚本):Python,PHP

GO语言在三个条件做了平衡:易于开发,快速编译,高效执行

1.helloworld

package main

import "fmt"

func main {

fmt.Println("hello world")

}

注意:

1.如果需要将程序编译成二进制程序,要将包名写成main包

第一个Go程序解读:

1.package

Go源文件开头必须使用package声明代码所属包,包是Go代码分发的最基本单位。若程序需要运行,则包名必须为main。

2.import

import用于导入程序所依赖的所有包,此程序依赖fmt包。

3.func

func用于定义函数,main函数是程序的入口,若程序需要运行必须声明main函数,main函数无参数也无返回值

4.fmt.Println

调用fmt.Println函数将参数信息打印到控制台

编译&运行:

# go build helloworld.go       (编译出helloworld.exe文件)

# go build -o test.exe helloworld.go   (test.exe文件)

# go run helloworld.go         (编译并运行helloworld.exe文件)

2.go 变量定义,变量限定适用范围

变量是指堆一块存储空间定义名称。

变量定义方式:

func main() {

var name string = "kk"//定义了类型也定义了初始值

var zerostring string // 定义变量类型,但不初始值

var typestring = "kk" //定义变量省略类型,不能省略初始值

//短声明(必须在函数内使用)

shortstring := "kk"

fmt.Println(name,zerostring,typestring,shortstring)

}

变量需要先定义再使用,直接使用会报错 

var name string = "abc"

name = "bca"

批量定义

var (

变量名1 变量类型1 = 值1

变量名2 变量类型2 = 值2

)

变量作用域:

变量查找会从函数内查找,没有才会去查找函数外的相同变量 

子块可以覆盖父块中使用的变量

变量标识符:

标识符:程序中定义的名字,变量名,常量名字,自定义类型,接口

规范:

1.必须满足:组成只能由非空的unicode编码字符串,数字,下划线组成

2.必须满足:必须以unicode编码的字符串或下划线开头(不能以数字开头)

3.必须满足:不能与go的关键字冲突(package,func,var)

建议:

1.Ascill编码(a-z,A-Z)数字,下划线

2.变量使用驼峰式

myName

3.与go内置变量不要冲突

函数级别:

func main {

var msg string = "hello workd"

fmt.Println(msg)

}

包级别:

var packageVar string = "package Var"

func main {

var msg string = "hello workd"

fmt.Println(msg, packageVar)

}

子块级别:

var packageVar string = "package Var"

func main {

var msg string = "hello workd"

{

var blockvar string = "block"

fmt.Println(packageVar,blockvar)

}

fmt.Println(msg, packageVar)

}

}

3.go 常量

常量一旦定义后不能修改

常量定义:

①常量

package main

import "fmt"

const (

packName string = "package"

packMsg = "pack"

A = "test"

B  // 使用前一个常量的值进行初始化 B->A

C  // 使用前一个常量的值进行初始化 C->B

D = "test2"

E

F

)  //使用前一个常量的值进行初始化

func main() {

const name string = "abc" 

fmt.Println(name, B, C, E, F)

}

②枚举

package main

import "fmt"

func main() {

const (

Mon = iota //在常量内使用iota,初始化为0,每次调用+1

Tuesd

Wed

Thur

Fir

Sat

Sun

)

fmt.Println(Mon)

}

4.go 变量打印

 fmt.Printf("%T, %v, %#v", name, name, name)

 占位符

 %T:打印变量类型

 %v:按某种格式打印变量

 %#v:按某种格式打印变量

5.go 数据类型

布尔类型:

package main

import "fmt"

func main() {

isGirl := false

fmt.Println("%T,%#v", isGirl, isGirl)

}

整数类型:

//int

/int8,int16,int32,int64

常用操作:

1.算数运算符:+,-,*,/,%,++,–

2.关系运算符:>,<,==,!=

3.位运算符:&,|

4.赋值运算符:=,+=,-=,*=

浮点数类型:

package main

import (

"fmt"

)

func main() {

var height float32 = 1.68

fmt.Printf("%T %#v %f\n", height,height,height)

}

逻辑运算:

与:左操作数与右操作数为true,结果为true

或:左操作数与右操作数只要有一个为true,结果为true

非:取反 

package main

import "fmt"

func main() {

a, b, c, d =: true, true ,false ,false

fmt.Println("a, b", a && b) 

fmt.Println("a, c", a && c)

}

 

6.条件语句

①if语句

package main

import "fmt"

func main() {

var y string

fmt.Print("买西瓜么:")

fmt.Scan(&y)

fmt.Println("你输入的是", y)

if y == "yes" {

fmt.Println("买一个西瓜")

}

}

初始化子语句

可以在if语句中初始化语句块内的局部变量,多个语句之间使用逗号分隔(;)

if flag := true;flag {

fmt.Println("flag:",flag)

}

②选择语句switch case

package main

import "fmt"

func main() {

var y string

fmt.Print("请输入:")

fmt.Scan(&y)

switch y {

case "yes", "y":

fmt.Println("输入的是1")

case "no", "n":

fmt.Println("输入的是no")

default:

fmt.Println("2222")

}

}

7.循环语句for,break,continue

package main

import "fmt"

func main() {

for i := 0; i < 10; i++ {

fmt.Println("1234")

}

var index = 1

for index <= 10 {

if index == 5 {

break

}

if index == 6 {

continue

}

fmt.Println(index)

index++

}

}

for-range

用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等

package main

import "fmt"

func main() {

var letters string

letters = "伍俊錡"

for _, k := range letters {

fmt.Printf("%q", k)

}

}

针对包含unicode字符的字符串便利,时需要使用for-range,range返回两个元素分别为字节索引和rune字符,可通过空白标识符忽略需要接受的变量。

类while,死循环

func main() {

for {

total += index

index ++

if index > 100 {

break

}

}

}

 


发表评论

您的电子邮箱地址不会被公开。