安装

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

Hello World

vi hello.go
package main  //包名 

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

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

注意:

第一行指明这个文件属于哪个包 /*...*/ 和 //一个大写字母开头{ 不能单独放在一行
go run hello.go
hello, world!
go build hello.go

基础语法

标识符第一个字符必须是字母或下划线而不能是数字

数据类型

  • 布尔类型 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
var zero_1 intvar string_1 = "this is string"新的变量v_name := value
一般用于声明全局变量
var (
  a int
  b bool
)
a, b = b, a,两个变量的类型必须是相同。
_ 也被用于抛弃值

常量

const identifier [type] = value
显式隐式
len(), cap(), unsafe.Sizeof()
iota
const (
    a = iota
    b //1
    c //2
)

运算符

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

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

条件语句

随机执行

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

环循

for 循环

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

函数

最少有个 main() 

如何定义

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

调用方式和Python的一致。

数组和指针

var variable_name [SIZE] variable_typevar list_1 = [4]int{1,23,4,5}
var list_1 = [...]int{1,23,4,5}
指针可以更简单的执行一些任务用计算机内存地址.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})
}