学习go基础

未来迟早得学

Posted by 叉叉敌 on November 30, 2020

安装

https://golang.google.cn/dl/

测试安装成功go version, 查看当前安装的版本

(base)   Golang go version
go version go1.15.6 darwin/amd64

Hello World

vi hello.go创建一个后缀为go的文件, 内容如下

package main  //包名 

import "fmt"  // go常见的一个包,实现了格式化IO, 输入和输出函数

func main() { // {不能换行
  fmt.Println("hello, world!") //打印一条hello world!
}

注意:

  • 源文件中非注释的第一行指明这个文件属于哪个包
  • main 函数是每一个可执行程序所必须包含的
  • 注释和Java类似, /*...*/ 和 //
  • 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头可以被外部代码所用, 如果是小写是对外不可见,但是内部可用。
  • { 不能单独放在一行

运行go run hello.go

hello, world!

编译成二进制文件go build hello.go

基础语法

标识符: 和python类似。用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字

数据类型

  • 布尔类型 true 和false
  • 数字类型 int float32 float64
  • 字符串 Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
  • 派生类型: (a) 指针类型(Pointer) (b) 数组类型 (c) 结构化类型(struct) (d) Channel 类型 (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型 —

    变量

    声明的用法是 var variable type.

  • 如果没有指定, 默认值为0, var zero_1 int, 这里的zero_1就是0
  • 第二种,根据值自行判定变量类型。var string_1 = "this is string", 这里的string_1就是string类型
  • 第三种,省略 var, 注意 := 左侧如果没有声明新的变量,就产生编译错误,格式:v_name := value

多个变量声明和单个类似。一般用于声明全局变量

var (
  a int
  b bool
)

交互值: a, b = b, a,两个变量的类型必须是相同。

空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。

## 常量

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。定义格式 const identifier [type] = value

  • 显式类型定义: const b string = “abc”
  • 隐式类型定义: const b = “abc”

常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。

iota,特殊常量,可以认为是一个可以被编译器修改的常量。

const (
    a = iota
    b //1
    c //2
)

运算符

运算符用于在程序运行时执行数学或逻辑运算。

  • 算术运算符 + - * / % ++ –
  • 关系运算符 == != > < <= >=
  • 逻辑运算符 &&   !
  • 位运算符 & ^ «  »
  • 赋值运算符 = += -= *= /= %= «= »= &= ^= =
  • 其他运算符 & 返回地址 * 指针变量

条件语句

  • if else (else if)
  • switch
  • select select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。

注意:Go 没有三目运算符,所以不支持 ?: 形式的条件判断。

环循

for 循环

  • break 语句 经常用于中断当前 for 循环或跳出 switch 语句
  • continue 语句 跳过当前循环的剩余语句,然后继续进行下一轮循环。
  • goto 语句 将控制转移到被标记的语句。

函数

Go 语言最少有个 main() 函数。函数声明告诉了编译器函数的名称,返回类型,和参数。

如何定义

func function_name( [parameter list] ) [return_types] {
   函数体
}

调用方式和Python的一致。

## 数组和指针

数组如何定义和声明, var variable_name [SIZE] variable_type 。初始化一个数组,var list_1 = [4]int{1,23,4,5}

有不指定大小来初始化一个list,var list_1 = [...]int{1,23,4,5}

Go 语言中使用指针可以更简单的执行一些任务。变量是一种使用方便的占位符,用于引用计算机内存地址. 声明方式 var var_name *var-type,在指针类型前面加上 * 号(前缀)来获取指针所指向的内容

package main

import "fmt"

func main() {
	var a int = 10 //声明实际变量
	var ip *int // 声明指针变量
	ip = &a // 指针变量的存储地址
	fmt.Println(&a)
	fmt.Println(ip)
	fmt.Println(*ip) // 用指针访问值
}

结构体

如何定义个结构体,

type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

variable_name := structure_variable_type {value1, value2...valuen}

variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}

比如下面的列子

package main

import "fmt"

func main() {
	type books struct {
	title 	string
	author 	string
	price 	float32
	id	int
	}
	fmt.Println(books{"title", "author", 12.22, 1})
	fmt.Println(books{title: "书名", price:12.44})
}

readmore

https://play-with-go.dev/guides.html

https://www.runoob.com/go/go-basic-syntax.html

github博客 微信公众号:chasays, 欢迎关注一起吹牛逼,也可以加微信号「xxd_0225」互吹。