基础语法+案例---Go

笔记篇:基础语法+案例| 青训营

基础语法

框架
  • package main代表这个文件属于main包的一部分, main 包是程序的入口包。
  • 导入了标准库里面的fmt(format)包。这个包主要是用来往屏幕输入输出字符串、格式化字符串。
关键字
类别关键字含义
类、方法和变量修饰符 chan定义一个channel
interface定义接口
func函数定义
mapmap结构类型
struct定义结构体
type定义类型
var声明变量
const声明常量
程序控制 break提前跳出一个块
continue回到一次循环的开始处
return从方法中返回
if条件语句的判断
else用在条件语句中,表明当条件不成立时的分支
for循环
switch分支语句结构的引导词
case用在switch语句之中,表示其中的一个分支
fallthrough如果case带有fallthrough,程序会继续执行下一条case,不会再判断下一条case的值
default默认选项,用在switch和select语句
selectgo语言特有的channel选择结构
defer延迟执行,函数的收尾工作。在函数结束前执行
go并发
goto跳转语句
range从slice、map等结构中取元素
包相关import表明要访问指定的类或包
package
数据类型
  • go语言是一个门强类型语言,每一个变量都有它自己的变量类型。
    • 强类型语言即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。(Python是动态语言,是强类型定义语言)而弱类型语言是一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过现行强制转换。(VB,PHP,JavaScript)
  • go语言是一个门静态类型语言
    • 对于动态语言与静态语言的区分,其根本在于判断是在运行期间去做数据类型还是在编译期间检查。
  • 变量的声明
    • C: float array[4], max = 0, min = 0, sum=0
    • GO: var a,b = 100, "abc"
    • var name string = " " 这种方式来声明变量,声明变量的时候,一般会自动去推导变量的类型。如果有需要,你也可以显示写出变量类型。
    • name := value` 只能用在函数内部,不能用在全局变量中。
  • 常量
    • 就是把var改成const,值在一提的是go语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型
  • 递增
    • Go中没有明确意思上的enum(枚举)定义,不过可以借用iota标识符实现一组自增常量值来实现枚举类型。
分支与循环
  • C :
    if (expression){ }
    else { }

for(表达式1; 表达式2; 表达式3){ 语句块 }

  • Python :
    if expression: 执行语句
    else:执行语句

for <变量> in <循环序列>: 循环体 else: else的语句块

  • Go :
    if expression { } s
    else { }

  • 在go里面没有while循环、do while循环,只有唯一的一 种for循环。

  • Go即使是一句代码也需要大括号!!!不同于C/C++

  • switch语句

    • 每一个case 语句不加break,默认是执行完立即跳switch,这是与其他语言不同的
    • 相比C或者C++,go语言里面的switch功能更强大。可以使用任意的变量类型,甚至可以用来取代任意的if else语句。
    • 如果在switch中不加任何变量,可以代替if-else。
 switch a{
     case 1:***
     case 2:***
     case 3:***
     case 4:***
 }
 switch{
     case t<12:
  
     default:
     
 }
函数
 package main
 ​
 import "fmt"
 ​
 func add(a int,b int){
     return a+b
 }

数组

  • 不同于c,这里的数组可以直接打印
var arr1 [4]int // 元素自动初始化为零
  fmt.Println(arr1) // [0 0 0 0]
  
  arr2 := [4]int{1,2} // 其他未初始化的元素为零
  fmt.Println(arr2) // [1 2 0 0]
  
  arr3 := [4]int{5, 3:10} // 可指定索引位置初始化
  fmt.Println(arr3) // [5 0 0 10]

切片

  • slice的原理实际上是它有一个它存储了 一个长度和一个容量,加一个指向一个数组的指针,在你执行append操作的时候,如果容量不够的话,会扩容并且返回新的slice。
  • slice此初始化的时候也可以指定长度。
  • slice拥有像python -样的切片操作,比如这个代表取出第二个到第五个位置的元素,不包括第五个元素。不过不同于python, 这里不支持负数索引。
  • a :=make([]type,n)
  • var b []int

map

  • 变量名 :=make(map[KeyType]ValueType)
package main

import (

"fmt"

)
func main() {

a := make([]int, 3)

b := []int{1, 5, 'a'}

c := make(map[string]int)

d := map[string]int{"one": 1, "two": 2}

fmt.Println(a, b, c, d)

}

指针

  • 功能有限,主要是对值进行修改

结构体

  • 结构体方法就是把函数第一个参数提到原本函数前边,然后加上括号。
type user struct {
  name string // 字段name 其数据类型为string
  age int // 字段age 其数据类型为int 
}

接口

  • 接口代表一个调用契约,是多个方法声明的集合。若一个struct类实现接口中所有方法,即表示该类实现了指定接口。
  • 在并发编程中,接口可以用于定义各种并发模式的接口。比如,在Go语言中,可以定义一个名为WaitGroup的接口,它包含了所有与等待组相关的方法,比如添加等待、等待结束等。然后可以为不同的并发库实现这个接口,以此来实现不同的并发模式。

备注稀土掘金—同一个人
备注稀土掘金—同一个人
备注稀土掘金—同一个人

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值