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
}
}
}
有疑问加站长微信联系(非本文作者)