Go基础语法学习笔记| 青训营

103 阅读4分钟

一、基础语法

1.变量:

(1)基础写法:var a int = 1(var +变量名+类型=变量值)

(2)简化写法:var a=1(var+变量名=变量值)

               a:=1(变量名:=变量值)推荐****

2.常量:

(1)基础写法:const a int=1(cont+变量名+类型=变量值)

(2)简化写法:const a=1(const+变量名=变量值)

3.if else语句:

(1)样例:

func main() {

    if 7%2 == 0 {

        fmt.Println("7 is even")

    } else {

        fmt.Println("7 is odd")

    }

}

(2)与C区别1:if else后面没有括号

(3)与C区别2:格式不同,“{”和“}”的格式固定了

4.for循环语句:

(1)样例:

func main() {

    for i := 7; i < 9; i++ {

        fmt.Println(i)

    }

}

(2)与C区别1:只有for一种循环

(3)与C区别2:格式不同,“{”和“}”的格式固定了

5.switch语句:

(1)样例:

func main() {

    t := time.Now()

    switch {

    case t.Hour() < 12:

        fmt.Println("before noon")

    default:

        fmt.Println("after noon")

    }

}

(2)与C区别1:switch后面可以加任何变量,比如结构体也可以用

(3)与C区别2:switch后面可以加判断语句,比如样例

(4)与C区别3:不需要添加break,会自动断开

6.数组:

(1)基础写法:var a [5]int (var +变量名+[个数]+类型)

(2)简化写法:a:=[5]int{1,2,3,4,5}(变量名:=+[个数]+类型+{各个元素})

7.切片:(相当于边长数组)

(1)定义:s:=make([]string,3),s为变量名,string为类型,3为长度

简化:s:=[]string{“g”,”o”,”o”,”d”}

(2)长度可以用len(s)函数得出

(3)追加元素:s=append(s,”d”,”e”),相当于在s字符串切片后面追加了d和e

(4)复制切片:copy(c,s),前者为新后者为旧

(5)选择打印:fmt.Prinln(s[2:5])就是第三、第四、第五

8.map:(哈希,字典)

(1)定义:m:=make(map[string]int),前者为key,后者为value

简化:m:=map[sting]int{“one”:1,”two”:2}

(2)赋值:m[“one”]=1

(3)删除:delete(m,”one”)

(4)map具有无序性,打印没有顺序

9.range:

(1)用处:方便数组和map的遍历

(2)遍历数组:for i,num:=range nums{,i是地址,num是value

(3)遍历map:for k,v:=range m{,k是key,v是value

10.函数:

(1)样例:

func add(a int,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

}

(2)类型后置

(3)可返回多值

11.指针:

(1)样例:

func add2ptr(n *int) {

    *n += 2

}

 

func main() {

    n := 5

    add2ptr(&n)

    fmt.Println(n)

}

 

(2)注意函数无返回值,以及*和&的使用

12.结构体:

(1)定义:

type user struct{

name string

password string

}

(2)赋值:a:=user(name:”wang”,password:”1024”)

d.name = “wang”

(3)函数:分无和有*

func checkPassword(u user , password string) bool{

    return u.password == password

}

 

func checkPassword2(u *user , password string) bool{

    return u.password == password

}

(4)结构体方法:也分*

type user struct {

    name     string

    password string

}

 

func (u user) checkPassword(password string) bool {

    return u.password == password

}

 

func (u *user) resetPassword(password string) {

    u.password = password

}

 

func main() {

    a := user{name: "wang", password: "1024"}

    a.resetPassword("2048")

    fmt.Println(a.checkPassword("2048")) //true

}

 

13.错误处理:

func findUser(users[] user, name string) (v *user, err error) {

    for _, u := range users {

        if u.name == name {

            return &u, nil

        }

    }

    return nil, errors.New("not found")

}

14.字符串处理:
常见操作:Contains,Cout,HasPrefix,HasSuffix,Index,Join,Repeat,Replace,Splitm,Tolower,ToUpper,len等等

15.字符串格式化:

(1)%v打印出的是值

(2)%+v打印出的是名称:值

(3)%#v打印出的是全结构

(4)%.2f等也可以用于限制浮点数

16.时间处理:

(1)time.Now获取当前时间

(2)其他:time.Date构造时区时间,t.Sub可以相减,t.Format用于格式化,time.Parse解析时间等

17数字解析:

(1)样例:

import (

    "fmt"

    "strconv"

)

 

func main() {

    f, _ := strconv.ParseFloat("1.234", 64)

    fmt.Println(f) //1.234

    m, _ := strconv.ParseInt("111", 10, 64)

    fmt.Println(m) //111

    n, _ := strconv.Atoi("123")

    fmt.Println(n) //123

}

 

(2)10是进制,64是精度

(3)作用:将字符串转化成为数

18.思考小结:

总的来说,语法和C与java还是有很多相似的,但是Go语言在有两个特性优点,一个是灵活,在很多语法处理中更宽松,比如switch语句中,可以用判断语句代替原本该是数的位置,让嵌套语句简化;一个是简化,将许多不太需要的地方简化,比如C语言中常见的括号和分号在Go语言中反而被简化了许多,这种简化也不会造成误解,方便了开发者的运用。这两个语法特性使得Go语言便于上手,而且其本身功能也很强大,相比之下,有很大的特性优点。