go语言学习 1 -- 类型

Go语言接受了函数式编程的一些想法,支持匿名函数与闭包,接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。

学习可参考书籍:老许的《go语言编程》、 老谢的《go web编程》、 雨痕的《go 语言学习笔记》、 golang.org上面的《Effective Go》、《The Go Programming Language Specification》、go标准库和github上众多开源库

Go 语言最主要的特性:

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性

环境安装

go语言环境下载地址:https://golang.google.cn/dl/

  1. 下载二进制包:go1.4.linux-amd64.tar.gz。

  2. 将下载的二进制包解压至 /usr/local目录。

    tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz

  3. 将 /usr/local/go/bin 目录添加至PATH环境变量:

    export PATH=$PATH:/usr/local/go/bin

然后就可以国际惯例,helloworld了。

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!") }

$go run helloworld.go

going go !

package main
//第一行代码 package main 定义了包名,package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

import "fmt"
 //import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数

const(       //常量组   用iota可以实现枚举的功能
	A = iota      //A =0
	B		      //全局变量不给赋初值的话默认等于上一个,但是iota已经为1  B=1
	C="c"		//C=”c“
	D			//D=”c“
	E=iota		//再调用一次iota,恢复计数 E=4
	F			//F=5
)

const (
	_  = iota   // iota = 0,下划线 _ 为占位符,就是充个数而已
	KB  int64 = 1 << (10 * iota)// iota = 1 
	MB
	GB
	TB
)

cost x,y 12,"111"     //多个全局变量定义赋值;不填数据类型,会自动根据值来判断
func test(para int) (int, string){  
//para 是形参  ,inti,string是返回值类型,go语言允许有多个返回值
	d := struct {       // 函数内部定义变量可以使用 :=
	s string
	x int
	}{"abc", 100}
	
	//将 Pointer 转换成 uintptr,可变相实现指针运算,指针本身是不支持指针运算的
	p := uintptr(unsafe.Pointer(&d)) // *struct -> Pointer -> uintptr
	p += unsafe.Offsetof(d.x) // uintptr + offset
	p2 := unsafe.Pointer(p) // uintptr -> Pointer
	px := (*int)(p2) // Pointer -> *int
	*px = 200 // d.x = 200
	
	return 2,"aaa"  //  两个返回值
}

func main(){
	var s2 string    //局部变量若定义了却没使用,编译会报错
	var num byte 100      //变量放在类型前
	var num_n int =num    //会报错,go语言里类型转换都需要显性转换var num_n int =(int) num
	var flag int 100
	hello:="HELLO, WORLD"
	if flag{    //不能这样用,if后面只能判断bool值
		fmt.Println("true")
	}
	he1 := hello[:5]   //HELLO
	he2 := hello[7:]  //WORLD
	he3 := hello[1:5] //ELLO 从1开始,不包括5
	data, i := [3]int{0, 1, 2}, 0  //多变量一起赋值
	i, data[i] = 2, 100   //多变量赋值时,先计算所有相关值,然后再从左到右依次赋值,i=2,data[0]=100
	_ , s :=test()
	fmt.Println(s)
	for _ , r := range hello {   //range循环
		fmt.Println("%c,",r)
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值