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!
随机推荐
- 01.vue-router的基本使用
Vue前端路由 1. npm install vue-router --save 2.脚手架安装 一.目录结构 二.index.js // 0.导入vue和路由插件 import Vue from ' ...
- 链家网 + gevent
import gevent from gevent import monkey monkey.patch_all() from gevent.queue import Queue import tim ...
- [转] Socket通信实例
点击阅读原文 Client端: #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> ...
- Selenium上传文件方法大全
最好的方法:调js 其他方法: Python pywin32库,识别对话框句柄,进而操作 SendKeys库 autoIT,借助外力,我们去调用其生成的au3或exe文件. keybd_event,跟 ...
- SpringMVC的url-pattern配置及原理剖析
SpringMVC的url-pattern配置及原理剖析 xml里面配置标签: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc./ ...
- HashSet扩容机制在时间和空间上的浪费,远大于你的想象
一:背景 1. 讲故事 自从这个纯内存项目进了大客户之后,搞得我现在对内存和CPU特别敏感,跑一点数据内存几个G的上下,特别没有安全感,总想用windbg抓几个dump看看到底是哪一块导致的,是我的代 ...
- 浅谈HTTPS和HTTP
1.HTTP和HTTPS的基本概念 HTTP:超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务端请求和应答的标准,用于WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览 ...
- C++_继承
C++支持单继承和多继承,并提供3类继承:public.private及protected.在public继承中,每个派生类对象都是基类对象,反之基类对象却不是派生类对象.派生类成员无法直接访问基本的 ...
- react 使用的方法:
react 使用方法: 第一步: 初始化react 项目 (1)安装node npm (2)npm install --global create-react-app (3)create-react ...
- android屏幕适配的全攻略2--支持手机各种屏幕密度dpi
如何为不同密度的屏幕提供不同的资源和使用密度独立的单位. 1 使用密度无关像素 坚决杜绝在布局文件中使用绝对像素来定位和设置大小.因为不同的屏幕有不同的像素密度,所以使用像素来设置控件大小是有问题的, ...