Go基本概念

程序结构

  • 包声明。package main: 表示一个可独立执行的程序,每个应用程序都包含一个名为 main 的包。
  • 引用。import “fmt” : fmt 包实现了格式化 IO(输入/输出)的函数。
  • 函数。func main(): 每一个可执行程序所必须包含的,启动后第一个执行函数(如果有 init() 函数则会先执行该函数)。
  • 语句或表达式。
  • 注释。/* */或 //
  • 标志符。大写变量类型public,小写变量类型protected

语句

不用以;结尾,一行多语句才需要。

数据类型

  • uint/int 8/16/32/64:无符号、有符号整型;
  • float32/float64浮点数,complex64/complex128复数;
  • bool:false/true,默认false;
  • string:默认"";
  • unitptr:无符号整型,存放指针;
  • byte:类型unit8
  • rune:类型int32

所有像 int、float、bool 和 string 这些基本类型都属于值类型,指向内存中值,而j = i,实际上是在内存中将 i 的值进行了拷贝

变量声明

  • var identifier1, identifier2 type
  • var a string = “Runoob”
  • intVal,intVal1 := 1,2 -----------:=赋值操作符

常量

  • 变量var变为const
  • 枚举
const (
    Unknown = 0
    Female = 1
    Male = 2
)

函数

  • 自定义:func max(num1, num2 int) int {}
  • 声明一个函数类型:type cb func(int) int
  • len(string)
  • unsafe.Sizeof(string) ----指针16吧
  • 结构体函数
/* 定义结构体 */
type Circle struct {
  radius float64
}
//该 method 属于 Circle 类型对象中的方法
func (c Circle) getArea() float64 {
  //c.radius 即为 Circle 类型对象中的属性
  return 3.14 * c.radius * c.radius
}

数组

  • var balance [10] float32
  • var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
  • var balance = […]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
  • var threedim [5][10][4]int
  • a = [3][4]int{
    {0, 1, 2, 3} , /* 第一行索引为 0 /
    {4, 5, 6, 7} , /
    第二行索引为 1 /
    {8, 9, 10, 11}, /
    第三行索引为 2 */
    }

结构体

  • type Books struct {}
  • Books{“Go 语言”, “www.runoob.com”, “Go 语言教程”, 6495407}
  • 通过.访问
  • 结构体指针访问也通过.
  • 结构体传入函数修改无效,传入结构体指针 修改有效

go语言切片

  • var slice1 []type = make([]type, len)
  • slice1 := make([]type, len)
  • make([]T, length, capacity)

语句

条件语句

  • if a < 20 { ----条件没有括号
  • switch
switch var1 {
    case val1:
    default:
    ...
}

printf

fmt.Printf(“变量的地址: %x\n”, &a )

var numbers = make([]int,3,5);fmt.Printf(“len=%d cap=%d slice=%v\n”,len(x),cap(x),x)

不一样地方

  • a, b, c = 5, 7, “abc” -------------多变量赋值
  • a, b = b, a -------------交换变量的值
  • return a,b,c -------------函数多返回值
  • fmt.Printf(“第 3 行 - c 变量类型为 = %T\n”, c );----输出c的类型
  • a = a++ -------------自增自减不能用于赋值语句

map

/* 声明变量,默认 map 是 nil /
var map_variable map[key_data_type]value_data_type
/
使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)

// 创建1
countryCapitalMap := map[string]string{"a": "apple", "b": "banana"}

// 创建2
var countryCapitalMap map[string]string /*创建集合 */
countryCapitalMap = make(map[string]string)

// 遍历如下
for country := range countryCapitalMap {
   fmt.Println(country, "首都是", countryCapitalMap [country])
}

// 查看元素是否存在
capital, ok := countryCapitalMap [ "American" ] 

// 删除
delete(countryCapitalMap, "France")

iota 特殊常量

从出现的行数从0开始

select语句

chan

  • 不带缓存
    make(chan 数据类型)
  • 带缓存
    make(chan 数据类型,长度),写入超过数量会阻塞
  • 关闭

通道缓存区

  • ch := make(chan int, 100)
  • ch <- 1 ------------------写入通道
  • var1 := <- ch ---------由通道读出
  • v, ok := <-ch
  • close© -----------------关闭

貌似通道类似栈吧,后进先出

for

  • for a := 0; a < 10; a++ {}
  • for a < b {}
  • numbers := [6]int{1, 2, 3, 5};for i,x:= range numbers {}

goto

LOOP: for a < 20 {
      if a == 15 {
         /* 跳过迭代 */
         a = a + 1
         goto LOOP
      }
      fmt.Printf("a的值为 : %d\n", a)
      a++    
   }  

switch 的 fallthrough

貌似fallthrough后case必然执行,后面就不执行了(若下一个case有fallthrough,需要继续)

接口

/* 定义接口 */
type interface_name interface {
   method_name1 [return_type]
   ..
}
var a interface_name 
a = new(实现的struct)

错误

// errorMsg不为空就输出
if                     result, errorMsg := Divide(100, 0);                    errorMsg != ""                  {
	fmt.Println("errorMsg is: ", errorMsg)
}

常见命令

命令说明
go build hello.go编译成二进制,win下生成exe文件
./不带后缀的文件名运行二进制文件,win下运行对应exe文件

常见问题

  • .\test.go:6:6: a declared and not used:声明的变量未用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值