Go语言基础知识点总结——包、函数、变量、常量、类型、流程控制

目录

Go语言——包

Go语言——函数

Go语言——变量

Go语言——const常量

Go语言——类型

Go语言——流程控制


Go语言——包

1、一个go语言文件的第一行写这个文件属于哪个包

package main

2、import 这个文件需要哪些包

可以一行一行写

import "fmt"
import "math"

也可以用括号()

import (
    "fmt"
    "math"
)

3、用文件路径判断包

package 包名(不用写一长串路径,写短的包名就行)

import "包所在的路径" (写路径,而不是包名)

Go语言——函数

1、方法定义

方法名或变量 大写字母开头:

         这个方法或变量是属于public,可以让其他包引用

方法名或变量 小写字母开头:

        方法或变量私有,只有本package能使用

没有public\protect\private等访问修饰符,通过字母大小写区分

 

2、几个参数同样数据类型,可以只写一次数据类型

func add(a int, b int) int {}
或
func add(a, b int)int {}

3、可以多值返回

func swap(x, y string) (string, string) {
    return y, x
}

4、可以对返回值命名,在函数体中就不用":="定义变量,返回时只"return"即可

func count(a int) (x, y int) {
    x = a + 1
    y = a - 1
    return 
}

Go语言——变量

可以连续赋值多个变量

1、var关键字

函数内外定义都可

可以在变量名后指定类型,也可以不指定(根据你的赋值自动推断数据类型)

指定变量类型:
var i, j int = 1, 2
不指定变量类型:
var a, b, c = true, "hello world", 100

2、var缩写-> ":=",但是":="只能用在函数体内

k := 3
a, b, c := true, "string", 123

Go语言——const常量

常量:一旦赋值了,就不能改了

Go语言——类型

1、基本类型

bool:true/false (不能作0/1运算)

string

整型:int  int8  int16  int32  int64 (int:系统是32就是32,系统是64就是64)

无符号整型: uint  uint8  uint16  uint32  uint64  uintptr(表示指针)

byte:byte == uint8  字节相当于无符号8位整型

rune:rune == int32 表示一个unicode码点

float32  float64 (没有float,常用float64)

complex64  complex128

 

2、类型转换

'类型()' 强制转换

不同类型之间需要显示转换

i := 123
f := float64(i)
u := uint(f)

string --> int

int, err := strconv.Atoi(str)

int --> string

string := strconv.Itoa(int)

string --> []byte

var data []byte = []byte(str)

[]byte --> string

var str string := string(data[:])

float64 <-->string

float, err := strconv.ParseFloat(str)
string := strconv.FormatFloat(data)

Go语言——流程控制

1、只有一种循环结构——for

区别:for后面没有括号

for sum:=0; sum < 1000; sum += 1 {
    sum += sum
}

for后面的第1、3项:初始值,和每一次循环的操作可以省略:

for ; sum < 1000; {
    sum += sum
}
分号也可以省略: //和while很像了,只是没有()
for sum < 1000 {  
    sum += sum
}

死循环:

for {}

2、if else

和其他语言区别:在执行判断语句之前,可以执行一个语句:

if z := x + y; z<a {...}

3、switch

每个case后面不用加break,相当它会自动加break

case不需要是常量,也不需要是整数

执行switch之前也可以先执行一个语句,在 switch os 中间插入一个赋值语句:

switch os := runtime.GOOS; os {
    case "darwin":
        fmt.Println("...")
    case "linux":
        fmt.Println("...")
    default:
        fmtPrintln("...")
}

特殊用法:switch{}替代一堆if else

switch {
    case t.Hour() < 12:
        fmt.Println("good morning")
    case t.Hour() < 17:
        fmt.Println("good afternoon")   
    default:
        fmt.Println("good evening")
}

4、defer

defer后面的语句不会马上执行,程序会继续向下执行,等整个函数执行完毕,再回来执行defer

defer后的语句会放到一个栈来保存起来,如果defer语句中间有需要计算的内容,会在入栈之前都计算好,不会在函数最后计算。

如果有多个defer,因为defer被压入栈,所以后进先出的顺序调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值