Let's GO(一)
近来开始学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!
随机推荐
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...
- vue踩过的坑('url' is assigned a value but never used no-unused-vars)
1.代码编写 2.遇见错误 3.解决方案 在错误代码后加入注释:(// eslint-disable-line no-unused-vars) 之后页面上就不会出现该错误信息了
- flink实时数仓从入门到实战
第一章.flink实时数仓入门 一.依赖 <!--Licensed to the Apache Software Foundation (ASF) under oneor more contri ...
- WPS2016ProPlus_normal 安装包+序列号
WPS OFFICE 2016 安装 链接:https://pan.baidu.com/s/1dfjNFDxcl1n2fvYTt9c86A 提取码: ij8e 下载解压:.txt是序列号,.exe是安 ...
- Android学习笔记数组资源文件
在android中我们可以通过数组资源文件,定义数组元素. 数组资源文件是位于values目录下的 array.xml <?xml version="1.0" encodin ...
- HTTP协议简要
HTTP协议简要 HTTP协议是指超文本传输协议,简单来说就是一种规则,允许将HTML文档从Web服务器传送到Web浏览器. HTTP请求 HTTP请求包括三部分:请求行(请求方法),请求头(消息报头 ...
- Python爬虫实战,完整的思路和步骤(附源码)
前言 小的时候心中总有十万个为什么类似的问题,今天带大家爬取一个问答类的网站. 本堂课使用正则表达式对文本类的数据进行提取,正则表达式是数据提取的通用方法. 环境介绍: python 3.6 pych ...
- CLR垃圾收集器
CLR GC是一种引用跟踪算法,大致步骤如下: 1.暂停进程中所有的线程: 2.标记阶段,遍历堆中的所有对象,标记为删除,然后检查所有活动根,如果有引用对象,就标记那个对象可达,否则不可达: 3.GC ...
- 程序员必备基础:Git 命令全方位学习
前言 掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~ https: ...
- Python实用笔记 (23)面向对象高级编程——使用__slots__
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object): pa ...