GO的几个输出【GoLang】

输出

1、刚开始接触,GO的输出还挺多,在最常用的两个方面做了比较😀

  • 纯文本输出
	fmt.Println("hello world!")
	fmt.Print("hello world!!\n")
	fmt.Printf("hello world!!!\n")
//res
hello world!
hello world!!
hello world!!!
  • 携带变量输出
	var a int = 1
	var b = 2
	var c = 3
	fmt.Println("hello world! like:", a,"wo",b,"再来一杯")
	fmt.Print(a,"wo",c,"不喝了","不喝了","\n")
	fmt.Printf("the %d times to say hello world!!! \n", c)
//res
hello world! like: 1 wo 2 再来一杯
1wo3不喝了不喝了
the 3 times to say hello world!!!
  • summary:
    fmt.Println("")
    适合输出像python列表那种形式的内容
    fmt.Printf("")
    前者的不换行,并且不同类型的内容输出时间会拼接或者间隔
    fmt.Print("")
    和c语言的printf非常类似

2、fmt.Printf("%v %T",a,a)
输出 a 的值和类型 %d %s等等也是支持的,%v是通用的
3、支出复数输出(后面再学)

函数

1、go 语言return不是原子操作,在底层分为两步执行

  • 第一步,返回值赋值
  • 第二步,真正的return返回
  • 函数中,如果存在defer ,那么defer执行的时机是在第一步和第二步之间

2、defer调用遵循栈的规则,怕忘记某条语句最后执行,最先把它写出来加上defer,表示延迟执行
3、返回多个值
4、自执行函数、匿名函数(gin框架里自执行)

内置函数

1、错误机制,panic("error!")(有时间再学)

变量

1、类型别名(有空再学)

接口

1、不关心变量类型,只关心能调用它的方法
2、接口是一种特殊的类型它规定了变量有哪些方法

package main

import (
	"fmt"
)

type speaker interface{
	speak()
}
type cat struct{}
type dog struct{}

func (d dog) speak() {//方法,(规定:接收者首字母d 接收者:dog)
	fmt.Println("www")
}

func (c cat) speak(){
	fmt.Println("mmm")
}

func da(x speaker){
	x.speak()
} 

func main() {
	
	var d1 dog
	var c1 cat
	da(d1)
	da(c1)

}

3、面向过程编程(随意),面向对象编程(臃肿),面向接口编程

并发

1、goroutine,用户态线程、100 000 个是可以的,优雅的等待并行结束,启动时需要时间和资源,防止在main结束后还没有结束而被迫结束,所以要等待wg.add()``wg.down()``wg.wait(),相比sleep()要优雅的多,结束间隔没有那么突兀,
2、GMP,不学,默认跑满,效率高,使用GMP可用于测试,日志收集
3、一个软件,通常对应一个进程,但可以跑在多个线程中,

go mod

1、go.1.11后,最新的包管理工具go mod
2、开启GO111MODULE=on 模块支持后,包目录会变,如gin,变为pkg/mod/github.com,而不再是直接pkg/github.com
3、启动gin,目前用的vscode,执行run code是不可以的!!会提示找不到包,使用原始的go build main.go./main来启动,

闭包

1、

package main

import "fmt"

func adder() func(int) int {
	var x int
	fmt.Println("x1:", x)
	return func(y int) int {
		fmt.Println("y:", y)
		fmt.Println("x2:", x)
		x += y
		fmt.Println("x3:", x)
		return x
	}

}
func main() {
	var f = adder()
	fmt.Println(f(10)) //10
	fmt.Println(f(20)) //30
	fmt.Println(f(30)) //60

}

输出:
x1: 0
y: 10
x2: 0
x3: 10
10
y: 20
x2: 10
x3: 30
30
y: 30
x2: 30
x3: 60
60

(后面再学,两层,x可输出、x值又保存在外层环境中,下次继续用)

三个内置数据结构

创建切片、哈希表和 Channel 等内置的数据结构(后面再学)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来杯Sherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值