这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
go语句不用分号隔开,除非一行要写多个语句,用户自己加分号,不过不建议这么做
go声明变量的类型一致都是放在后面
c:int a=10; go: var a int =10 “var name type的格式”
go中上面的语句可以写成
四种方式:推荐后两种
var a int =10
var b int
b=10
var c="hello" 自动推导了c的类型
**如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误**
d:="byebye" 等于var d string ="byebye"
所以可以用:=直接声明初始化,不过:=只能用于函数体内,不能用于声明全局变量
:=叫做初始化声明
多个变量声明
//类型相同多个变量, 非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断
vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误
// 这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
var c, d int = 1, 2
var e, f = 123, "hello"
//这种不带声明格式的只能在函数体中出现
//g, h := 123, "hello"
var a, b int
var c string
a, b, c = 5, 7, "abc"
go中if for不写括号
switch不用break,走到了相应的case自动会退出
go只有for
函数的声明 func add(a,b int) int{ }类型都后置了
go的函数可以返回多个值,有指针和引用传递
func swap(x, y string) (string, string) {
return y, x
}
go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑
go声明数组:var arr[10] int
go数组初始化:
var arr=[5] int{1,2,3,4,5}
brr:=[3] int{1,2,3}
数组长度不确定了[]可以写... 根据后面数据去推导
长度确定了可以根据索引去初始化
// 将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0, 3:7.0}
go的结构体,像c++一样也可以有自己的成员函数,go的结构体对象或者结构体指针访问成员都是用点.没有->
type Books struct {
title string
author string
subject string
book_id int
}
func main() {
// 创建一个新的结构体
fmt.Println(Books{"Go 语言", "www", "Go ", 6495407})
// 也可以使用 key => value 格式
fmt.Println(Books{title: "Go 语言", author: "www", subject: "Go", book_id: 6495407})
// 忽略的字段为 0 或 空
fmt.Println(Books{title: "Go", author: "www"})
}
go切片(动态数组),
var slice1 []int = make([]int, 3)
slice2 := make([]int, 4)
//可以指定容量cap可选参数
make([]type, length, capacity)
//初始化
xx := []int{0,1,2,3,4,5,6,7,8}
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
func main() {
var numbers []int
printSlice(numbers)
if(numbers == nil){
fmt.Printf("切片是空的")
}
}
func printSlice(x []int){
fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
len=0 cap=0 slice=[]
切片是空的
go范围循环range
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
以上代码中的 key 和 value 是可以省略。
如果只想读取 key,格式如下:
for key := range oldMap
或者这样:
for key, _ := range oldMap
如果只想读取 value,格式如下:
for _, value := range oldMap
go的map集合 无序
定义 Map
可以使用内建函数 make 也可以使用 map 关键字来定义 Map:
/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)
如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对
var countryCapitalMap map[string]string /*创建集合 */
countryCapitalMap = make(map[string]string)
go中的类型转换是这样的
括号把表达式包起来
var z int=10
var v int=20
var m float32
m=float32(z)/float32(v)
fmt.Println(z,v,m)