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!
随机推荐
- 手把手教你用redis实现一个简单的mq消息队列(java)
众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有 ActiveMQ,RabbitMQ,Zero ...
- SimpleDateFormat 和 Calendar 对于时间的处理
import java.text.SimpleDateFormat;import java.util.Date;public class test { public static void main( ...
- Java学习之第二天
一.流程控制 1.顺序结构:自上而下,依次执行(从上到下,一直走下去) 2.选择结构:(1)if .if—else.嵌套if (2)switch(mod){ case 1:执行代码 case 2:执行 ...
- 说出 Servlet 的生命周期,并说出 Servlet 和 CGI 的区别。
Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法,service 方法自动派 遣运行与请求对应的 doXXX 方法(doGet,doPost)等,当 ...
- DedeCms 标签中channelartlist设置属性标签样式的方法
实现的效果如下: {dede:channelartlist typeid='6' row='3' currentstyle='current'} <li class='{dede:field.c ...
- min_25筛入门
目录 1.什么是min_25筛 2.前置知识 2.1.数论函数 2.2.埃拉托色尼筛 2.3.欧拉筛 3.min_25筛 3.1.计算质数贡献 3.2.计算总贡献 3.3.实现 4.例题 4.1.[L ...
- java锁总结
1.公平锁与非公平锁 公平锁:指多个线程在等待同一个锁时,必须按照申请锁的先后顺序来依次获得锁. 优点:等待锁的线程不会饿死.缺点:整体效率相对较低. 非公平锁:可以抢占,即如果在某个时刻有线程需要获 ...
- cb38a_c++_STL_算法_transform
cb38a_c++_STL_算法_transformtransform()算法有两种形式:transform(b1,e1,b2,op);//b1(源区间)的数据通过op函数处理,存放在b2(目标区间) ...
- @PathVariable @RequestParam@RequestBody
@PathVariable 当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariabl ...
- 3、struct2的常见配置
1.在eclipse中如何复制一个工程作为一个新的工程 在struct.xml中: <result name="success">/login_sucess.jsp&l ...