package main//main包是程序的入口包
import (
"fmt"//fmt包,用来输入输出字符串
)
fmt.println这行代码调用了fmt包中的Println函数,用于打印字符串"hello world"到控制台。
fmt包,用来输入输出字符串
字符串是内置类型,能够直接用‘+’拼接,用‘=’去比较。
变量的声明
1.var a (int)=~ ~
2.a:=(int)()
常量就是把var改为const常量可以通过上下文自动确定类型
if后面条件没有()
只有一个for循环
switch如果没有break会默认跑完所有case
switch case中case里写条件可以代替if else
数组长度固定,不常用,更多用切片
切片
用make创建一个切片
func main() {
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)//拷贝赋值
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e],取出从第二个位置到第五个位置的元素,不包括第五个
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
} 扩容相当于创建一个新的slice,需要再次赋值回去 map就是哈希 也是用make创建 m := make(map[string]int) m["one"] = 1 m["two"] = 2 fmt.Println(m) // map[one:1 two:2] fmt.Println(len(m)) // 2 fmt.Println(m["one"]) // 1 fmt.Println(m["unknow"]) // 0
r, ok := m["unknow"]//ok用来获取map里到底有没有这个key存在
fmt.Println(r, ok) // 0 false
delete(m, "one")
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)
map是无序的,随机输出 range,对于slice和map可以用range快速遍历 会返回两个值,第一个是索引,第二个是值,不需要索引用下划线替代 指针用来对传入的参数进行修改
func add2ptr(n *int) { *n += 2 }
func main() {
n := 5
add2(n)
fmt.Println(n) // 5
add2ptr(&n)
fmt.Println(n) //
结构体
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称
一旦定义了结构体类型,它就能用于变量的声明
错误处理,在函数处理时,在函数类型+error表明可能返回错误
要访问结构体成员,需要使用点号 . 操作符"
结构体.成员名"
可以像其他数据类型一样将结构体类型作为参数传递给函数。并以以上实例的方式访问
可以定义指向结构体的指针类似于其他指针变量,格式如下:
var struct_pointer *Books
以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:
struct_pointer = &Book1
使用结构体指针访问结构体成员,使用 "." 操作符:
struct_pointer.title