近来开始学Go,留此博客以记录学习过程,顺便鞭策自己更加努力。

人生苦短,Let's GO!

简单介绍

The Go Programming Language

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

我学习主要参考七米老师的博客李文周的博客以及他在B站的视频,在此也感谢一下大佬无私分享。

今天我学了什么有趣的东西?

1.万物起源HelloWorld

package main   //一个Go项目必须有一个main包

import "fmt"   

func main() {
//万物起源Hello World
fmt.Println("Hello World!")
}

2.iota

const (
a1 = iota //a = iota == 0
b1 //b = iota == 1
c1 //c = iota == 2
)

3.string

//保留分行
s3 := ` Hello
World`
fmt.Println(s3)
/*
Hello
World
*/

4.array

//初始化按下标定义
str := [...]string{1:"java",3:"go",7:"c"}
fmt.Println(str)
//[java go c]

哦差点忘了,数组不可变!

5.slice

解决数组不可变

slice是引用数组的某一部分,改变slice会改变对应数组

s3 := make([]int,5,10)
fmt.Printf("%v,len:%v,cap:%v",s3,len(s3),cap(s3))
//slice能跟nil(空)比较,但不能跟其他slice比较
if s == nil {//suggest len(s) == 0
fmt.Println("s is nil")
}
//! not nil after init,although it is empty
var s4 = []int{} //or s4 := make([]int,0) the same
if s4 == nil {
fmt.Println("s4 is nil") //you won't see it
}
for i:=0; i<10; i++ {
s = append(s, i) //向s末尾添加值i的元素,容量不足会自动扩大
fmt.Printf("%v,len:%v,cap:%v,ptr:%p\n",s,len(s),cap(s),s)
}
//append s1(另一个切片)
s = append(s,s1...)
fmt.Println(s)
//delete index: append(s[0:index],s[index+1:]...)
s8 := append(s[0:2],s[3:]...) //delete s[2]
fmt.Println(s8)
//sort array
var b = [...]int{8,23,12,4,5}
sort.Ints(b[:])
fmt.Println(b)

6.if for switch

go 没有while,或者说,for expr {}就是while

//if
if i:=0; i>1 { //选择性定义
fmt.Println(i)
} else if i>2 {
fmt.Println(i)
} else {
fmt.Println(i)
}
//switch
switch str:="hello";str { //不仅支持整形
case "he"+"llo": //case可以使用表达式
fmt.Println("true")
fallthrough //go每个case自动break,使用fallthrough执行下一case
default:
fmt.Println("false")
}
//for
//1.
for i:=0; i<10; i++ {
fmt.Println(i)
}
//2.while
i := 10
for i>0 {
fmt.Println(i)
i--
}
//for range
var name = []int {1, 2, 3, 4, 5}
for j,k := range name {
fmt.Println(j,k)
}

7.指针

学过C的同学可能看到指针就会有点头皮发麻吗哈哈,go的指针很简便了

a := 10
pa := &a
fmt.Printf("pa:%v,addr:%p,type:%T\n",*pa,pa,pa)

就这么简单的用法,*和&,没有偏移

//还有感觉不太会用到的new
b := new(int) //*b = 0
fmt.Println(*b)

总而言之

Go还是挺有趣的,语法中充满了一些对语法老前辈的不满哈哈。

那么今天就学到这了,人生苦短,Let's GO!

随机推荐

  1. Pytest单元测试框架——Pytest+Allure+Jenkins的应用

    一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...

  2. Thread基础-创建线程的方式

    Java线程创建的几种简单方式 1. extends Thread类 public class ThreadDemo extends Thread{ @Override public void run ...

  3. D2大全

    年初看到cnblogs上有人说看这本旧书,自己也只是瞟了下,后来在看些OOP东西时,想想没事也看看老古董,于是网购了一本电子版可参考下,它们是怎么一步步来,还没来得及多看,贴图于此.

  4. xdoj 2020校赛复盘

    平时写东西都不喜欢复盘,这肯定不是一个好习惯,感觉每次花好几个小时甚至好几天写题目然后没写出来也不去看题解是一种很蠢的行为( 花了这么久时间打校赛,虽然水平很low,数据结构也不太会用,还是记录一下自 ...

  5. SpringBoot + Mybatis + Redis 整合入门项目

    这篇文章我决定一改以往的风格,以幽默风趣的故事博文来介绍如何整合 SpringBoot.Mybatis.Redis. 很久很久以前,森林里有一只可爱的小青蛙,他迈着沉重的步伐走向了找工作的道路,结果发 ...

  6. 基于SSM框架的新生报到可视化系统

    1.本课题的目的及意义 新生报到数据一直是困扰着各大高校的管理性问题,人数多.工作量大,这无疑是一个挑战,也因此加快了高校的信息化建设步伐.随着互联网的普及与发展,日常生活中人们接触到的数据正以惊人的 ...

  7. selenium(3)-针对鼠标的操作

    背景 用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等. 而selenium给我们提供了一个类来处理这类事件-----------Acti ...

  8. Rigidbody(刚体)方法的初步学习(一)

    概要:这次将简单的了解Rigidbody中的各种方法属性,以官方的API为顺序研究. 蛮牛API翻译:Rigidbody组件控制物体的位置—它使物体在重力影响下下落,并可计算物体将怎样响应碰撞.当操作 ...

  9. Beta冲刺<4/10>

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺--第四天(05.22) 作业正文 如下 其他参考文献 ... B ...

  10. Beta冲刺<6/10>

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺--第六天(05.24) 作业正文 如下 其他参考文献 ... B ...