Go基础语法|青训营笔记

373 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第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 intint {
   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 -->又更详细