这是我参与「第五届青训营 」伴学笔记创作活动的第1天
基础语法
//main包的一部分,程序的入口包
package main
/*导入format包
主要用来输入、输出字符串,格式化字符串
*/
import (
"fmt"
)
/*
main函数,调用fmt中的Println
*/
func main(){
fmt.Println("hello world")
}
运行hello.gogo run hello.go
或者
编译成二进制 go build hello.go
再运行./hello.go
变量
Go的变量类型是 后置的
根据上下文自动确定变量类型
声明变量的两种方式
1.var 变量名 = 值
会自动推导变量类型
2.变量名:=值
常变量: const 变量名=值
if-else
与C/C++类似,
区别:
1.其 if后面没有括号if 7%2 == 0
若加了括号,编辑器在保存时会自动去掉括号
2.if后面必须是{}
###循环 只有for循环
1.死循环:for后面什么都不写 {}
i :=1
for {
fmt.Println("loop")
break
}
switch-case 分支循环
case:默认break
可以使用任意的变量类型
t :=time.Now()
switch{
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
数组&切片
数组:长度固定
切片:可变长度的数组
make 创建切片
s := make([]string,3)
切片可用的方法
append(), 必须赋值s = append(s,"d")
容量不够会自动扩容
对切片的操作与python类似
不支持负索引
map:哈希/字典
无序
make 创建map
m := make(map[string]int)
需要两个类型
make(map[key类型]value类型)
写入k,v对与其它语言类似
m["one"] = 1
delete 删除k,v对
delete(m,"one")
range
切片、map
函数
func add( a int, b int) int {
return a +b
}
func add2(a,b int ) int { //错误
return a + b
}
func exists(m map[string]string, k string)(v string,ok bool) {
v, ok = m[k]
return v,ok
}
func main() {
res :=add( 1,2)
fmt .Println( res)// 3
v, ok := exists(map[string]string{"a" : "A"},"a"")
fmt .Println(v,ok)// A True
指针
对常用参数进行修改
结构体
字符串
操作
strings.Contains(a,"ll")字符串a中是否包含ll
.Count(a,"l")计数
.Index(a,"ll") 查找某字符串的位置
.Join([]string{"he","llo"},"-"))连接字符串// he-llo
.Repeat(a,2) 重复字符串
格式化
Printf("s=%v",s)
可以用 %v 打印任意类型变量,不需要区分
%+v -->更详细的结构
%#v -->又更详细