Go语言入门基础
Go语言入门基础
author: histonevon@zohomail.com
date: 2020/08/04
1.源文件
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
package声明所属包名称
注意 一般所属包名称与所在目录名相同,main函数包名一定是main
package main //声明所属包名称,一般所属包名称与所在目录名相同,main函数包名一定是main
import导入标准库或第三方包
有单行导入和多行导入两种方式
//单行导入 import "pkg1" import "pkg2"
//多行导入 import ( "fmt" //导入标准库,也可导入第三方包 "math" "time" "eqdis/input" //eqdis为自定义工程文件名,input为自定义包名 ) //使用小括号,各项之间没有逗号
在LiteIDE里单行导入多个包时会被自动合并为多行导入格式
入口函数main函数
入口函数main没有参数和返回值,如果要通过shell向main传入参数,可在os.Arg变量中保存
main函数必须放在main包中
注意 Go语言中左大括号 ” { “ 必须和函数声明或控制结构在同一行
注意 Go语句后分号可以省略,出现分号的典型位置是for循环等处
func main() { fmt.Println("Hello World!") //直接输出 fmt.Printf("%d+%d=%d\n", 1, 1, 2) //格式化输出 }
2.变量
存在以下几种声明方式
var sum int //简单声明,默认初值为0,避免意外
var total int = 42 //声明并初始化
var label = "name" //类型推断,不需要程序员敲进去类型,此处推断为string类型
tag := "My" //短变量+类型推断,用于函数内部,不能作为全局变量
var c, d int = 35, 85 //可多变量一同赋值
var a,b *int //a,b均为int型指针
Go语言特色
类型跟在变量名后面
可以类型推断,节省程序员工作
短变量声明,短变量符号 ” := “(注意 短变量仅用于函数内部,不能声明全局变量)
多变量同时赋值
3.if语句
func main() {
a := 3
b := 4
max := 0
if a > b {
max = a
} else {
max = b
}
fmt.Println(max)
}
条件表达式无需括起来
if和else对应的语句块的大括号不能省略,哪怕只有一条语句
左大括号和if/else等控制结构在同一行
else不能单独成行,必须和if的右大括号一起
if后可以添加特征值获取语句,与特征值判断用分号隔开,这是golang用 ” ; “ 的地方之一
来看一个例子
func main() {
a := 3
b := 4
flag := min(b, a) //此处获取特征值,flag在上下文中都可取
if flag == 3 {
fmt.Println("hello")
} else {
fmt.Println("world")
}
}
func min(a, b int) int {
var min int
if a < b {
min = a
} else {
min = b
}
return min
}
上述main函数可以写成
func main() {
a := 3
b := 4
//可以添加特征值获取语句,与特征值判断用分号隔开,这是golang用;的地方之一
if flag := min(b, a); flag == 3 {//此处flag特征值仅可用于条件快内
fmt.Println("hello")
} else {
fmt.Println("world")
}
}
运行结果均如下
如果存在第三个分支可以这样
if condition1 {
// do something
} else if condition2 {
// do something else
}else {
// catch-all or default
}
4.分支语句
func main() {
var result int
var condition byte = 'e' //byte类型相当于C语言中的char
switch condition {
case 'a', 'b':
result = 1
case 'e':
result = 2
default:
result = 0
}
fmt.Println(result)
}
fall-through不再是默认行为,符合条件的语句执行完后无需再加break即可自动结束分支过程
简化目标相同的分子条件,使用逗号分隔
分支条件不限于整数和字符,任何有效的表达式都可以作为分支条件(如下)
switch result := calculate(); true {
case result < 0:
/* negative */
case result > 0:
/* positive */
default:
/* zero */
}
注意 分支值如果省略,默认适配为真,及上述true可以去掉(如下)
switch result := calculate(); { //注意分号不能省略
/* ... */
}
5.循环
go中只有for循环
循环条件不需要括起来
使用方法如下
类似普通while循环
//相当于一般的while循环
func main() {
x := 0
for x < 5 {
fmt.Println(x)
x++
}
}
原始的for用法
func main() {
for x := 0; x < 5; x++ {
fmt.Println(x)
}
}
while(true)或do...while循环
func main() {
x := 4
for {
fmt.Println(x)
x--
if x < 0 {
break
}
}
}
for...range循环
可同时返回集合中的数据的索引和值
range右边的表达式必须是array,slice,string,map或是指向array的指针,也可以是channel
func main() {
x := []int{100, 101, 102}
for i, v := range x {
fmt.Println(i, ":", v)
}
}
再看一个例子
func main() {
for i, v := range "Hello 世界" {
fmt.Printf("%d,%c\n", i, v) //%c表示Unicode字符格式输出
}
}
由上例可见,UTF-8中一个汉字占3B(字节)