Go语言基础
Go语言结构
- 包声明
- 引入包
- 函数
- 变量
- 语句
- 注释
package main
import "fmt"
func main() {
/* 这是我的第一个简单的程序 */
fmt.Println("Hello, World!")
}
-
package main定义包名.package main表示一个可独立执行的程序,每个Go应用程序都包含一个名为main的包 -
import "fmt"告诉编辑器使用的是fmt这个包的函数,fmt包实现了格式化IO的函数 -
每个Go程序都包含main函数
-
Go语言中
{不能单独处在一行 -
每个语句之后不需要以;结尾
变量
声明变量用var :var a1, a2 int = 1, 2
如果没初始化,这变量默认为零值.
var会自行判定变量类型
如果已经使用var声明过了,再使用:=声明,则会产生err
语句inVal := 1 等于
var inVal int
inVal = 1
局部变量被声明后必须被使用
常量
const a1 int = 10
枚举
const {
unknow = 0
female = 1
male = 2
}
配合关键字iota
const {
a = iota // 0
b //1
c //2
d = "ha" //独立 iota += 1
e //“ha” iota += 1
f = 100 //100 iota += 1
g //100 iota += 1
h = iota //7 恢复
i = //8
}
运算符
- 算术运算符:和C一样
package main
import "fmt"
func main() {
var a int = 21
var b int = 10
var c int
c = a + b
fmt.Printf("第一行 - c 的值为 %d\n", c )
c = a - b
fmt.Printf("第二行 - c 的值为 %d\n", c )
c = a * b
fmt.Printf("第三行 - c 的值为 %d\n", c )
c = a / b
fmt.Printf("第四行 - c 的值为 %d\n", c )
c = a % b
fmt.Printf("第五行 - c 的值为 %d\n", c )
a++
fmt.Printf("第六行 - a 的值为 %d\n", a )
a=21 // 为了方便测试,a 这里重新赋值为 21
a--
fmt.Printf("第七行 - a 的值为 %d\n", a )
}
/*
第一行 - c 的值为 31
第二行 - c 的值为 11
第三行 - c 的值为 210
第四行 - c 的值为 2
第五行 - c 的值为 1
第六行 - a 的值为 22
第七行 - a 的值为 20
*/
-
关系运算符 : 和C一样
package main import "fmt" func main() { var a int = 21 var b int = 10 if( a == b ) { fmt.Printf("第一行 - a 等于 b\n" ) } else { fmt.Printf("第一行 - a 不等于 b\n" ) } if ( a < b ) { fmt.Printf("第二行 - a 小于 b\n" ) } else { fmt.Printf("第二行 - a 不小于 b\n" ) } if ( a > b ) { fmt.Printf("第三行 - a 大于 b\n" ) } else { fmt.Printf("第三行 - a 不大于 b\n" ) } /* Lets change value of a and b */ a = 5 b = 20 if ( a <= b ) { fmt.Printf("第四行 - a 小于等于 b\n" ) } if ( b >= a ) { fmt.Printf("第五行 - b 大于等于 a\n" ) } } /* 第一行 - a 不等于 b 第二行 - a 不小于 b 第三行 - a 大于 b 第四行 - a 小于等于 b 第五行 - b 大于等于 a */ -
逻辑运算符 : 和C一样
-
赋值运算符
package main
import "fmt"
func main() {
var a int = 21
var c int
c = a
fmt.Printf("第 1 行 - = 运算符实例,c 值为 = %d\n", c )
c += a
fmt.Printf("第 2 行 - += 运算符实例,c 值为 = %d\n", c )
c -= a
fmt.Printf("第 3 行 - -= 运算符实例,c 值为 = %d\n", c )
c *= a
fmt.Printf("第 4 行 - *= 运算符实例,c 值为 = %d\n", c )
c /= a
fmt.Printf("第 5 行 - /= 运算符实例,c 值为 = %d\n", c )
c = 200;
c <<= 2
fmt.Printf("第 6行 - <<= 运算符实例,c 值为 = %d\n", c )
c >>= 2
fmt.Printf("第 7 行 - >>= 运算符实例,c 值为 = %d\n", c )
c &= 2
fmt.Printf("第 8 行 - &= 运算符实例,c 值为 = %d\n", c )
c ^= 2
fmt.Printf("第 9 行 - ^= 运算符实例,c 值为 = %d\n", c )
c |= 2
fmt.Printf("第 10 行 - |= 运算符实例,c 值为 = %d\n", c )
}
/*
第 1 行 - = 运算符实例,c 值为 = 21
第 2 行 - += 运算符实例,c 值为 = 42
第 3 行 - -= 运算符实例,c 值为 = 21
第 4 行 - *= 运算符实例,c 值为 = 441
第 5 行 - /= 运算符实例,c 值为 = 21
第 6行 - <<= 运算符实例,c 值为 = 800
第 7 行 - >>= 运算符实例,c 值为 = 200
第 8 行 - &= 运算符实例,c 值为 = 0
第 9 行 - ^= 运算符实例,c 值为 = 2
第 10 行 - |= 运算符实例,c 值为 = 2
*/
条件语句
if a > 10{
a++
if a <= 10{
a--
}
}
if a > 10{
a++
}else{
a--
}
循环语句
for i = 0;i < 100;i++{
fmt.Printf("%d",i)
}
函数
func max(num1, num2 int) int {
//函数体
}
/*
结构:
func函数声明 函数名(参数) 返回类型{
函数体
}
*/
数组
-
声明(初始化)数组
var arr [10]int arr := [5]int{1,2,3,4,5} var arr [5]int{1,2,3,4,5} -
当数组长度不确定时
var arr [...]int{1,2,3,4}
指针
var ip *int
==空指针是nil==
结构体
type Books struct{
title string
author string
book_id int
}
切片
数组的长度不可变的时候可能有些情况不适用
-
定义切片
var arr []int //未指定数组长度来定义切片 var slice1 []int = make([]int,LEN) //make()函数创建切片 //or slice1 := maek([]int,LEN) -
初始化切片
s :=[] int {1,2,3} // []表示切片类型==未初始化之前的切片默认为nil,长度为0==
-
切片截取
fmt.Printf("number[1:4]",numbers[1:4])
范围
关键字range
格式:
for key, value := range oldMap{
newMap[key] = value
}
//or
for key := range oldMap
Map(集合)
-
定义map
格式: map_variable := make(map[KeyType]ValueType, initialCapacity) //创建一个空的map m := make(map[string]int) //创建一个初始容量为10的map m := make(map[string]int,10) //使用字面量创建map m := map[string]int{ "apple": 1, "banana": 2, } //获取键值对 v1 := m["apple"] //修改 m["apple"] = 5 //获取map长度 len := len(m) //遍历map for k,v := range m{ fmt.Printf("key=%s") } //删除键值对 delete(m,"banana")
类型转换
格式:type_name(expression)
举个栗子
var a int = 10
var b float64 = float64(a)