go 的基本使用

const 修饰,代表永远是只读的,不能被修改
常量的定义 以及强制类型转换
const filename = "abc.txt"
const 数值可作为各种类型使用
函数时编程
如何把 4,5 转换成5,4
main(){
fist =100
maix = 200
fist,maix = maix,fist

变量的作用域
1,在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部
2,在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的则作用于整个程序
int 8 一个字节 int16 俩字节 int32 四个字节 int64 八个字节
uint 无符号整形
生成随机数
matn/rand
rand.Int()
字符类型: var a byte 8位一个字节
字符串类型:var str string
占位符
%v 相应值的默认格式
%#v 响应值的go语法表示
%T 相应值的类型的Go语法表示
%% 字符上的百分号,并非占位符
%t 单词true或false
整数
%b 二进制表示
%c 相应Unicode码点所表示的字符
%d 十进制表示
%o 八进制表示
%q 单引号围绕的字符字面值,由go语法安全地转义
%x 十六进制表示,字母形式为小写 a-f
%X 十六进制表示,字母形式为大写A-F
%U Unicode格式
浮点数
%b 无小数部分的
%f 有小数点而无指数
字符串与字节切片
%s 字符串或切片
%q 双引号围绕的字符串
%x 十六进制,小写字母,每个字节俩个字符
%X 十六进制,大写字母,每个字节俩个字符
//字符串翻转
func reverse(str string) string{
var result string
strLen :=len(str)
for i := 0; i<strLen; i++{
result =result+fmt.Sprintf("%c",str[strLen-i-1])
}
return result
}

func main(){
var str1 ="hello"
result :=reverse(str1)
fmt.Println(result)
}
fmt.Scanf("%d",&n)
获取控制台输出
//水仙花
func isNumber(n int) bool{
var i,j,k int
i = n % 10
j = (n/10)%10
k = (n/100) %10
sum := iii + jjj + kkk
return sum == n
}

func main(){
var n int = 100
var m int =999

for i := n; i <m; i++{
if isNumber(i) == true{
fmt.Println(i)
}

}
}

strings 和strconv
strings.HasPrefix(s string,prefix string) bool 判断字符串s是否以prefix开头
stirngs.HasSuffix(s string,suffix string) bool, 判断字符串s是否以suffix结尾
strings.Index(s string,str string) int 判断str在s中首次出现的位置,如果没有出现则返回-1
strings.LastIndex(s string,str string) int 判断str在s中最后出现的位置,如果没有出现,则返回1
string.Replace(str string, old string,new string,n int),字符串替换
strings.Count(str string,substr string)int 字符串计数
strings.Repeat(str string,count int) string 重复count次str
strings.ToLower(str string) string:转为小写
strings.ToUpper(str string) string 转为大写
时间和日期类型
time包
time.Time类型,用来表示时间
获取当前时间 now :=time.Now()
time.Now().Day() ,time.Now().Minute(),time.Now().Month(),time.Now().Year()
指正的类型
普通类型,变量存的就是值,也叫值类型
获取变量的地址,用&,比如 var a int ,获取a的地址:&a
指针类型,变量存的是一个地址,这个地址存的才是值
获取指针类型所指向的值,使用:* 比如var p int 使用p获取p指向的值
goto 类似于for循环
label1
如果j == 4 就直接结束当前for循环执行父类
func main(){
LABEL1:
for i := 0;i <=5 ;i++ {
for j := 0;j<=5;j++{
if j ==4 {
continue LABEL1
}
fmt.Println("i is:%d,and j is:%d\n",i,j)
}
}
}
函数
声明语法:func 函数名(参数列表)[(返回值列表)]
golang 函数的特点
不支持重载,一个包不能有个俩个名字一样的函数
函数是一等公民,函数也是一种类型,一个函数可以赋值给变量
匿名函数
多返回值
//可变参数
func add(a int, arg ...int)int {
var sum int = a
for i :=0; i<len(arg);i++{
sum +=arg[i]
}
return sum
}
func main(){
sum :=add(10,3)
fmt.Println(sum)
}
//可变参数字符串拼接
func add(a string, arg ...string)(result string) {
result = a
for i :=0; i<len(arg); i++{
result += arg[i]
}
return
}
func main(){
sum :=add("hello","word")
fmt.Println(sum)
}
函数
defer用途:
当函数返回时,执行defer语句,因此可以用来做资源清理
多个defer语句,按先进后出的方式执行
defer语句中的变量,在defer声明时就觉定了
for i :=0;i<10;i++{
defer
fmt.Println(i)
}
打印10 9 8。。。。1
defer用途 锁资源释放
func read(){
mc.LockI()
defer mc.Unlock()
}
数据库连接的释放
func read(){
conn :=openDatabase()
defe conn.Close()
}
内置函数
close:主要用来关闭channel
len:用来求长度,比如string,array,skice,map,channel
new 用来分配内存,主要用来分配值类型,比如int,struct,返回的是指针
make:用来分配内存,主要用来分配引用类型,比如chan,map,slice
append:用来追究元素到数组,slice中
panic和recover;用来做错误处理
//斐波那契数
func fab(n int) int{
if n <=1 {
return 1
}
return fab(n-1) +fab(n-2)
}
func main(){
for i := 0; i<10;i++{
n:=fab(i)
fmt.Println(n)
}
}
数组:是同一种数据类型的固定长度的序列
切片:切片是数组的一个引用,因此切片是引用类型
切片的长度可以改变,切片是一个可变的数组
通过make来创建切片
切片拷贝
s1 := [] int(1,2,3,4,5)
s2 :=make([]int,10)
copy(s2,s1)
切片
s3 :=[]int{1,2,3}
s3 = append(s3,s2 ...)
排序操作 使用sort包 import("sort")
sort.Ints 对整数进行排序
func testIntSort(){
var a = [...]int{1,8,38,2,144}
sort.Ints(a[:])
fmt.Println(a)
}
sort.Strings 对字符串进行排序,
sort.Float64 对浮点型进行排序
map 数据结构
ket -value 的数据结构,又叫做字典或者关联数组
map 数据结构
map排序
a.先获取所有key,把key进行排序
b.按照排序好的key,进行遍历
线程同步
impoty("sync")
互斥锁,var mu sync.Mutex
读写锁 var mu sync.RWMutex
写多的时候加互斥 读多的时候加读写锁

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容