Go的基础操作

hello world

通过一段简单go代码打印hello world。

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello, Golang!")
}

我们来逐行解析一下:

  • package main :声明了当前这个go文件所在的包,Go用包来组织代码,一般一个文件夹是一个包,包内可以暴露类型供其他包使用。
  • import (“fmt”):fmt就是go语言的一个标准库,用来处理标准输入输出的包。
  • func main :main是整个程序的入口,main函数所在的包也必须是main。
  • fmt.Println(“hello world!”):调用fmt包的PPrintln 方法,打印出 “Hello World!”

变量

  • 用var关键字声明变量。变量声明的一般语法是:var 变量名 类型。如果同时声明多个同一类型的变量时,可以这么写var b, c int = 1, 2。
  • 或者用:=来进行变量声明和赋值,编译器根据初始化值自动对变量类型推导(C++auto关键字)
    示例:
var a int // 如果没有赋值,默认为0
var a int = 1 // 声明时赋值
var a = 1 // 声明时赋值
a := 1
msg := "Hello World!"

简单变量类型

空值:nil

整型类型: int(取决于操作系统), int8, int16, int32, int64, uint8, uint16, …

浮点数类型:float32, float64(精度类似double)

字节类型:byte (等价于uint8)

字符串类型:string

布尔值类型:boolean,(true 或 false)

var a int8 = 10
var c1 byte = 'a'
var b float32 = 12.2
var msg = "Hello World"
ok := false

go的const关键字:声明常量,与var形成对比。定义格式为:const pi float64 = 3.1415926
也可以省略类型,编译器自动推导(var也可以省略)。

常量组可以声明多个常量,例如:

const (
    a = 1
    b = 2
    c = "hello"
)

常量实现枚举

const (
    Sunday = 0
    Monday = 1
    Tuesday = 2
    Wednesday = 3
    Thursday = 4
    Friday = 5
    Saturday = 6
)

字符串

go中,采用utf-8编码,如果是英文字符串,每个字符占一字节,如果是中文字符,每个字符占三字节。
字符串是以 byte 数组形式保存的,一个或多个字节表示一个字符,类型是 uint8,占1个 byte,打印时要转换成string,否则打印的是编码值(这个字节转换成整数值)。但是对于中文,对一个字节的转换并不是所要的中文。
所以对于字符串正确的输出方式:
将string转换为rune数组:

str2 := "Go语言"
runeArr := []rune(str2)	//string转换rune
fmt.Println(reflect.TypeOf(runeArr[2]).Kind()) // int32 ,4个字节正确处理中文
fmt.Println(runeArr[2], string(runeArr[2]))    // 35821 语
fmt.Println("len(runeArr):", len(runeArr))    // len(runeArr): 4

go语言中len函数用于获取各种数据类型的长度。

  • 对于字符串,返回字节数量,占用几个字节
  • 对于数组,返回数组元素的个数
  • 对于切片(动态数据结构),返回切片中元素的数量
  • 对于map,获取键值对的数量

数组和切片

声明数组

var arr [5]int     // 一维
var arr2 [5][5]int // 二维 

声明时初始化

var arr = [5]int{1, 2, 3, 4, 5}
//或者arr := [5]int{1, 2, 3, 4, 5}

数组长度不能改变,拼接数组或者取子数组,可以使用切片。切片包含容量,长度,指向底层数组的指针。
声明切片

//使用[]声明
slice := []int{}

//根据数组生成切片,整个数组或子数组
slice := arr[:]
//slice := arr[1:3]

//用make函数声明
slice := make([]int , 3 , 5) //3是长度(必须),5是容量(可选)

make用于创建和初始化内置的数据类型(切片[]T,映射map[K]T,通道channel)。这些数据类型使用前需要初始化。

//切片
make([]T , len , cap)
//map
make(map[k]v)
//channel
make(chan T ,buffer - size)

使用切片
append函数第二个参数接收一个或者多个要添加到第一个切片里的元素,可以在另一个切片后加…用于展开切片。

slice3 := append(slice1 , slice2...)	//拼接切片

map

//声明
m := make(map[int]int)
//声明时初始化
m1 := map[int]int{ 1:1 , 2:2 }
//修改
m1[1] = 2

指针

指针也是变量,*string类型

str := "string"
var p *string = &str
*p = "hello"

//指针用于函数传参
func add(num *int){
	*num+=1
}

if else

没有小括号

if 判断 {
}else{
}

for

没有了小括号和赋值时有区别。

for i:=0;i<10;i++{
}

switch

默认不向下执行,不需要break,需要向下执行则需要fallthrough。

type Gender int8	//用int8作为gender底层

	const (
		MALE   Gender = 1	//定义的两个常量是gender类型的,12区分性别
		FEMALE Gender = 2
	)
	gender := MALE
	switch gender {
	case FEMALE:
		fmt.Println("female")
	case MALE:
		fmt.Println("male")
	default:
		fmt.Println("unknown")
	}

你可能感兴趣的:(Go语言学习专栏,golang,后端)