Go学习之旅:包、变量和函数(DAY 1)
创始人
2024-02-17 05:15:04
0

文章目录

    • 前引
    • 包、变量和函数
      • 1、包的概念和所用
      • 2、导出名或者导出函数
      • 3.1、函数参数声明方式(一)
      • 3.2、函数参数声明方式(二)
      • 4、函数返回值支持多值返回
      • 5、函数命名返回值
      • 6、变量声明
      • 7、变量的基础类型
      • 8、变量的默认值(零值)
      • 9、变量的类型转换
      • 10、变量的定义类型推导 + 常量定义


前引


由于这段时间都一直在找实习 而现在已经快到另外一个阶段了 所以也算是有一点心情继续更新博客了

家中有事本来打算今天离校回成都 但恰巧今天再次封校 无奈把之前买的票给退掉了 只能尽人事 听天意了 继续留校等待出校的时机 希望封控不会持续太久…

这段时间发生了太多太多事情了 后续有比较好的时机会单独分享一下

后续由于某些原因 需要去学习Go语言 在寝室闲着也是闲着 不如自己也就花点时间学一下 后续反正也要学

God Bless!上天保佑


包、变量和函数


1、包的概念和所用


Go语言开始都是以包为单位 有两个关键字 Packet Import 可执行程序必须包含main Packet 就像c语言中的以main函数为入口 import则是引入其他包的路径 例如常用的fmt 就类似于c语言中的头文件引入
注意使用的时候 import是引入包的路径 而在函数中 则是指出包来使用函数

需要理解这个概念 于是自己写了两个文件
在这里插入图片描述


111.go

package mainimport ("fmt""../test2"
)func main() {fmt.Println("today is 2022/11/26")FuckCOVID.Go()
}

222.go

package FuckCOVIDimport ("fmt"
)func Go() {fmt.Println("Fuck this COVID-19")
}

运行效果
在这里插入图片描述


2、导出名或者导出函数


Go语言中如何想要导出当前包的函数或者变量 必须要把变量头个字符大写
小写可以理解为 c/c++中的 全局static函数 而大写则是可以导出使用 例如下方


111.go
第四行main函数 注释才可以使用

package mainimport ("fmt""../test2""math"
)func main() {fmt.Println(math.Pi)fmt.Println(FuckCOVID.Publicnum)//fmt.Println(FuckCOVID.privatenum)FuckCOVID.PublicGo()//FuckCOVID.privatego()
}

222.go

package FuckCOVIDimport ("fmt"
)var Publicnum int = 10
var privatenum int = 20func PublicGo() {fmt.Println("Fuck this COVID-19 Public")
}func privatego() {fmt.Println("Fuck this COVID-19 Private")
}

运行效果
在这里插入图片描述


3.1、函数参数声明方式(一)


go语言的函数参数 以及变量的声明方式与c/c++的函数 参数声明方式有太大的不同

例如变量声明
c-style int a float b double c

go-style var a int var b float var c double**

例如函数声明 两个参数的
c-style int add(int x, int y) { return x + y; }
go-style func Add(x int, y int) int { return x + y }

下方链接是解释了为什么函数 变量声明与c语言不同了
Go’s Declaration Syntax


声明一个简单的函数
111.go

package mainimport ("fmt"
)func add(x int, y int) int {return x + y
}func main() {fmt.Println(add(10, 10))
}

运行效果
在这里插入图片描述


3.2、函数参数声明方式(二)


对于大量重复的参数类型 可以优化
放到最后一个参数声明即可

111.go

package mainimport ("fmt"
)func addthreenum(x, y, z int) int {return x + y + z
}func main() {fmt.Println(addthreenum(10, 10, 10))
}

运行效果
在这里插入图片描述


4、函数返回值支持多值返回


go语言支持多值返回 这样对于很多功能实现就方便了
对于swap就不需要额外的中间变量 或者加减值 异或实现了

例如下方函数示例,Println会自动分隔开参数打空格
111.go

package mainimport ("fmt"
)func swap(x string, y string) (string, string) {return y, x
}func main() {var x string = "first string"y := "second string"fmt.Println(x, y)fmt.Println(swap(x, y))
}

5、函数命名返回值


可以对返回的值进行命名 但是这个就以为这是声明在函数顶部的变量
之后则是可以对其赋值

返回值也可以直接return 这个效果就是返回了返回值中定义的变量

111.go

package mainimport ("fmt"
)func swap(x string, y string) (swapy string, swapx string) {return y, x
}func split(sum int) (a, b int) {a = sum / 10b = sum % 10return
}func main() {var x string = "first string"y := "second string"fmt.Println(x, y)fmt.Println(swap(x, y))fmt.Println(split(17))
}

运行效果
在这里插入图片描述


6、变量声明


go-style 声明变量
总结了有三种模式:

var num int(初始化为默认值)
var num int = 10
var num = 10(go语言主动推断类型)
num := 10(go语言推断值 省略var 但是只能在函数内部使用 显示初始化 因为函数外必须以关键字开始)


111.go

package mainimport ("fmt"
)var a, b, c int
var a1, b1, c1 int = 1, 2, 3func main() {var x = "first string"y := "second string"var intnum int = 5var floatnum = 1.32judge := falsefmt.Println(x)fmt.Println(y)fmt.Println(intnum)fmt.Println(floatnum)fmt.Println(judge)fmt.Println(a, b, c)fmt.Println(a1, b1, c1)
}

运行效果
在这里插入图片描述


7、变量的基础类型


Go常用的基础类型有
整数类型:(u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr(指针),byte,rune(int32 的别名)(int大小取决于系统位数 32位4字节 64位8字节)
字符(串)类型:byte,string
浮点型:float32,float64
布尔型:bool


8、变量的默认值(零值)


下面列一下基础类型的全部零值
var i int(0)
var floatnum float64(0)
var boolean bool(false)
var str string(“”)


111.go

package mainimport ("fmt"
)func main() {var intnum intvar floatnum float64var boolean boolvar str stringfmt.Println(intnum)fmt.Println(floatnum)fmt.Println(boolean)fmt.Println(str)
}

运行效果
在这里插入图片描述


9、变量的类型转换


go语言的类型转换风格和c语言是相同的
只不过go语言不支持隐式类型转换 隐式类型转换无法进行正常编译

类似于c语言中的强制类型转换


111.go

package mainimport ("fmt"
)func main() {var intnum int = 10var floatnum float64 = float64(intnum)var tmpfloat float64 = 3.141592653var toint int = int(tmpfloat)fmt.Println(intnum)fmt.Println(floatnum)fmt.Println(tmpfloat)fmt.Println(toint)
}

在这里插入图片描述


10、变量的定义类型推导 + 常量定义


var int i
j := i

这种情况 j则是i的类型


这个则是推导 定义根据后面的推导

i := 42 // int
f := 3.142 // float64
g := 0.867 + 0.5i // complex128


常量定义只是用const去取代var

const intnum int = 10
const floatnum float64 = 3.1415926

相关内容

热门资讯

从创始人驱动到制度驱动,“中国... 导语:随着一代传奇人物陈景河退入幕后,紫金矿业这一庞大的矿业帝国能否续写神话? 李平/作者砺石商业...
“两高”联合发布第三批行政公益... 中新网12月22日电 据“最高人民检察院”微博消息,为进一步发挥典型案例指导引领作用,12月22日,...
福田区举行年度律师大会 《粤港... 深圳新闻网2025年12月22日讯(深圳特区报记者 张玮玮 林清容 通讯员 蔡梓帆 张圳伟)12月1...
浙江天台男子行凶致一死一伤 起... 封面新闻记者 张奕丹 今年5月,浙江省天台县发生一起一死一伤的刑事案件。12月22日,被害人的家属陈...
闪电律解·每周精选问答丨遗产继... 齐鲁网·闪电新闻12月22日讯 随着网友法律意识的提升,越来越多的人选择通过法律渠道解决自己生活工作...
以和为贵化纠纷 情理兼顾续亲情 近日,桦甸市人民法院成功调解一起亲友间民间借贷纠纷,既化解了债务矛盾,又维系了双方亲属情谊,以司法温...
西北联大旧址濒临灭失公益诉讼促... 行政公益诉讼抢救濒危抗战文物。 12月22日,最高人民法院、最高人民检察院联合发布第三批行政公益诉讼...
原创 央... #以案件说法# 近年来,随着消费升级和二手商品市场的崛起,许多商家开始通过直播平台进行二手衣物的回收...
点赞!习水纠纷调解只进一扇门 日前,习水县人民调解委员会接到一起劳资纠纷求助。工作人员第一时间详细核查当事人诉求及案件细节,随即联...