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内置变量不要冲突
函数级别:
var msg string = "hello workd"
fmt.Println(msg)
包级别:
var packageVar string = "package Var"
fmt.Println(msg, packageVar)
子块级别:
{
var blockvar string = "block"
fmt.Println(packageVar,blockvar)
3.go 常量
常量一旦定义后不能修改
常量定义:
①常量
const (
packName string = "package"
packMsg = "pack"
A = "test"
B // 使用前一个常量的值进行初始化 B->A
C // 使用前一个常量的值进行初始化 C->B
D = "test2"
E
F
) //使用前一个常量的值进行初始化
const name string = "abc"
fmt.Println(name, B, C, E, F)
②枚举
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 数据类型
布尔类型:
isGirl := false
fmt.Println("%T,%#v", isGirl, isGirl)
整数类型:
//int
/int8,int16,int32,int64
常用操作:
1.算数运算符:+,-,*,/,%,++,--
2.关系运算符:>,<,==,!=
3.位运算符:&,|
4.赋值运算符:=,+=,-=,*=
浮点数类型:
import (
"fmt"
var height float32 = 1.68
fmt.Printf("%T %#v %f\n", height,height,height)
逻辑运算:
与:左操作数与右操作数为true,结果为true
或:左操作数与右操作数只要有一个为true,结果为true
非:取反
a, b, c, d =: true, true ,false ,false
fmt.Println("a, b", a && b)
fmt.Println("a, c", a && c)
6.条件语句
①if语句
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
fmt.Print("请输入:")
switch y {
case "yes", "y":
fmt.Println("输入的是1")
case "no", "n":
fmt.Println("输入的是no")
default:
fmt.Println("2222")
7.循环语句for,break,continue
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
用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等
var letters string
letters = "伍俊錡"
for _, k := range letters {
fmt.Printf("%q", k)
针对包含unicode字符的字符串便利,时需要使用for-range,range返回两个元素分别为字节索引和rune字符,可通过空白标识符忽略需要接受的变量。
类while,死循环
for {
total += index
index ++
if index > 100 {