文件名&关键字&标识符

1. 所有go源码以 .go结尾

2. 标识符以字母或者下划线开头,大小写敏感:add, Add, _add

_是特殊标识符,用来忽略结果

3. 保留关键字

Go程序基本结构

package main
import “fmt”
func main() {
fmt.Println(“hello, world”)
} //1. 任何一个代码文件隶属于一个包
//2. import 关键字,引用其他包
//3. golang可执行程序,package main,并且有且只有一个main入口函数
//4. 包中函数调用:
a. 同一个包中函数,直接调用
b. 不同包中函数,通过 包名.函数名 进行调用
//5. 包访问控制规则
大写意味着这个函数/变量是可导出的
小写意味着这个函数/变量是私有的,包外部不能访问

函数声明和注释

1. 函数声明: func   函数名字 (参数列表) (返回值列表){}
func add() {}
func add(a int , b int) int {}
func add(a int , b int) (int, int) {}
2. 注释,两种注释,单行注释: // 和多行注释  /* */

常量和变量

常量

1. 常量使用const 修饰,代表永远是只读的,不能修改
2. const 只能修饰boolean,number(int相关类型、浮点类型、complex)和string
3. 语法:const identifier [type] = value,其中type可以省略

const b string = "hello world"
const b = "helloworld"
const a = 10
const res = getValue() //错误示例 const(
a = 0
b = 1
c = 2
) const(
 a = iota
b //1
c //2
)

变量

语法:var identifier type

var (
a int            //默认为0
b string      //默认为””
c bool        //默认为false
d = 8
e = “hello world”
)

值类型和引用类型

1 值类型:变量直接存储值,内存通常在栈中分配

基本数据类型int、float、bool、string以及数组和struct
2 引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。

 指针、slice、map、chan等都是引用类型

变量作用域

在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部
在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的,则作用于整个程序。

数据类型和操作符

1 bool类型,只能存true和false
           var a bool

var a bool = true

var a = true

2 相关操作符 ! && ||

3 数字类型,主要有int、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float32、float64

4 类型转换,type(variable),比如:var a int=8;  var b int32=int32(a)

package main
func main() {
var a int
var b int32
a = 15
b = a + a // compiler error
b = int32(a+a)
b = b + 5 // ok: 5 is a constant
}

5 逻辑操作符: == 、!=、<、<=、>和 >=

  数学操作符:+、-、*、/等等

6 字符类型:var a byte

var a byte = 'c'

7 字符串类型: var str string

8 字符串表示两种方式: 1)双引号 2)`` (反引号)

var str2 = `hello \n \n \n
this is a test string
This is a test string too·`
 #string到int
int,err:=strconv.Atoi(string)
#string到int64
int64, err := strconv.ParseInt(string, 10, 64)
#int到string
string:=strconv.Itoa(int)
#int64到string
string:=strconv.FormatInt(int64,10)

string, int, int64互转

几个例子

 // main
package main import (
"fmt"
) func is_prime(num int) bool {
if num == 1 {
return false
}
for i := 2; i < num; i++ {
if num%i == 0 {
return false
}
}
return true
} func main() { var count int
for i := 100; i <= 200; i++ {
if is_prime(i) {
count++
fmt.Println(i)
}
}
fmt.Println("totally prime number: ", count)
}

100-200间的素数

 // main
package main import (
"fmt"
"strconv"
) func is_narcissistic(num int) bool {
num_str := strconv.Itoa(num)
length := len(num_str)
var sum int
for i := 0; i < length; i++ {
tmp, _ := strconv.Atoi(num_str[i : i+1])
//fmt.Println(tmp)
sum += tmp * tmp * tmp } if sum == num {
return true
}
return false
} func main() {
var count int
for i := 100; i < 1000; i++ {
if is_narcissistic(i) {
count++
fmt.Println(i)
}
}
fmt.Println("total number: ", count)
}

100-999种所有的水仙花数

 // main
package main import (
"fmt"
) func factorial(num int) int {
var result = 1
for i := 1; i <= num; i++ {
result *= i
}
return result
} func factorial_sum(num int) int {
var sum int
for i := 1; i <= num; i++ {
sum += factorial(i)
}
return sum
} func main() {
res := factorial_sum(3)
fmt.Println(res)
}

n的阶乘之和

8.1   strings和strconv使用

strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 。
strings.HasSuffix(s string, suffix string) bool:判断字符串s是否以suffix结尾

// main
package main import (
"fmt"
"strings"
) func urlProcess(url string) string {
result := strings.HasPrefix(url, "http://")
if !result {
url = fmt.Sprintf("http://%s", url)
}
return url
} func pathProcess(path string) string {
result := strings.HasSuffix(path, "/")
if !result {
path = fmt.Sprintf("%s/", path)
}
return path
} func main() {
var (
url string
path string
)
fmt.Scanf("%s%s", &url, &path) fmt.Println(urlProcess(url))
fmt.Println(pathProcess(path))
}

判断前缀后缀

strings.Index(s string, str string) int:判断str在s中首次出现的位置,如果没有出现,则返回-1
strings.LastIndex(s string, str string) int:判断str在s中最后出现的位置,如果没有出现,则返回-1

strings.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:转为大写

strings.TrimSpace(str string):去掉字符串首尾空白字符
strings.Trim(str string, cut string):去掉字符串首尾cut字符
strings.TrimLeft(str string, cut string):去掉字符串首cut字符
strings.TrimRight(str string, cut string):去掉字符串首cut字符
strings.Field(str string):返回str空格分隔的所有子串的slice
strings.Split(str string, split string):返回str split分隔的所有子串的slice

strings.Join(s1 []string, sep string):用sep把s1中的所有元素链接起来
strings.Itoa(i int):把一个整数i转成字符串
strings.Atoi(str string)(int, error):把一个字符串转成整数

9 时间 和日期类型

9.1. time包
9.2. time.Time类型,用来表示时间
9.3. 获取当前时间, now := time.Now()
9.4. time.Now().Day(),time.Now().Minute(),time.Now().Month(),time.Now().Year()
9.5. 格式化,fmt.Printf(“%02d/%02d%02d %02d:%02d:%02d”, now.Year()…)

9.6 . time.Duration用来表示纳秒

9.7. 一些常量:
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)

9.8. 格式化:
now := time.Now()
fmt.Println(now.Format(“02/1/2006 15:04”))
fmt.Println(now.Format(“2006/1/02 15:04”))
fmt.Println(now.Format(“2006/1/02”))

 // main
package main import (
"fmt"
"time"
) func main() {
now := time.Now()
fmt.Println(now.Format("2006/01/02 15:04:00"))
}

打印当前时间

10 指针类型

10.1. 普通类型,变量存的就是值,也叫值类型
10.2. 获取变量的地址,用&,比如: var a int, 获取a的地址:&a
10.3. 指针类型,变量存的是一个地址,这个地址存的才是值
10.4. 获取指针类型所指向的值,使用:*,比如:var *p int, 使用*p获取p指向的值

go 数据类型和操作符的更多相关文章

  1. GO语言系列(二)- 基本数据类型和操作符

    一.文件名 & 关键字 & 标识符 1.所有go源码以.go结尾 2.标识符以字母或下划线开头,大小写敏感 3._是特殊标识符,用来忽略结果 4.保留关键字 二.Go程序的基本结构 p ...

  2. go 从入门到精通(二)基本数据类型和操作符

    一.文件名&关键字&标识符 所有go源码都是以.go结尾 标识符以字母或下划线开头,大小写敏感 下划线_是特殊标识符,用户忽略结果 保留关键字 导入包时可以设置别名 下面是保留关键字: ...

  3. golang基础之二-基本数据类型和操作符

    文件名&关键字&标识符 所有go源码都是以.go结尾 标识符以字母或下划线开头,大小写敏感 下划线_是特殊标识符,用户忽略结果 保留关键字 导入包时可以设置别名 下面是保留关键字: b ...

  4. golang(2):基本数据类型和操作符

    1). 文件名 & 关键字 & 标识符 . 所有go源码都以 .go 结尾 . 标识符以字母或下划线开头,大小写敏感 . _ 是特殊标识符,用来忽略结果 . 保留关键字 golang  ...

  5. Python-5 数据类型、操作符

    #1 数值类型: 整型int.浮点型float(科学记数法 e 或 E).布尔型bool #2 字符串: 与整型.浮点型转化:int()--截断处理 float() str() #3 获取数据类型: ...

  6. swift 学习(一)基础知识 (基本数据类型,操作符,流控制,集合)

    xcode 中调用API帮助 1.查看简单信息,选中后 按键 control +左键单击  或者按 右侧属性栏 里的帮助按钮 2.完整API,选中后 按键 control +左键双击 3.查看类.函数 ...

  7. Phoenix的数据类型和操作符、函数

    其实官方文档已经有这些东西了,如下: http://phoenix.apache.org/language/functions.html http://phoenix.apache.org/langu ...

  8. python数据类型、操作符

    python中数据类型包含:int,float,boolean,string,list(列表),set(集合),dictionary(字典) 数据类型转换: ①字符串 转 int:>>&g ...

  9. Java数据类型、操作符、表达式

    基本与C#相同,因C#从Java学的   如操作符     对象的Equals方法,比较两个对象的内容是否相等.     ==是比较是否引用同一对象.

随机推荐

  1. Openstack组件部署 — Networking service_安装并配置Controller Node

    目录 目录 前文列表 前提条件 网络环境 完成下面的步骤以创建数据库 创建service credentials服务凭证 创建Neutron的API Endpoints 配置自服务网络 安装网络组件 ...

  2. nginx代理一个服务器上所有域名

    1. 主配置文件不需要更改任何配置2. 在vhosts目录下需要建立两个文件,一个是servername 列表文件,一个是虚拟主机配置文件两个文件内容分别为 #() servername server ...

  3. Dubbo入门到精通学习笔记(十二):Dubbo消费端直连提供者(开发调试)、Dubbo服务只订阅(开发调试)、Dubbo服务只注册

    文章目录 Dubbo消费端直连提供者(开发调试) Dubbo服务只订阅(开发调试) Dubbo服务只注册 Dubbo消费端直连提供者(开发调试) Dubbo 官方文档: 用户指南 >> 示 ...

  4. Dubbo入门到精通学习笔记(十一):Dubbo服务启动依赖检查、Dubbo负载均衡策略、Dubbo线程模型(结合Linux线程数限制配置的实战分享)

    文章目录 Dubbo服务启动依赖检查 Dubbo负载均衡策略 Dubbo线程模型(结合Linux线程数限制配置的实战分享) 实战经验分享( ** 属用性能调优**): Dubbo服务启动依赖检查 Du ...

  5. UDP 协议解析 - 1

    目录 1. 概述 2. UDP 的主要特点 3. UDP 的首部格式 3. UDP 校验和 3.1 伪首部 3.2 UDP 校验和计算方法 [参考文献] 1. 概述 用户数据报协议(UDP,User ...

  6. 洛谷 P4173 残缺的字符串 (FFT)

    题目链接:P4173 残缺的字符串 题意 给定长度为 \(m\) 的模式串和长度为 \(n\) 的目标串,两个串都带有通配符,求所有匹配的位置. 思路 FFT 带有通配符的字符串匹配问题. 设模式串为 ...

  7. 拾遗:使用 systemd-journald 管理 Docker 容器日志

    在 docker.service 文件中的 ExecStart 字段中,添加(或:docker run --log-driver=journald): --log-driver=journald \ ...

  8. Javascript 面向对象之继承

    本文参考书籍<<Javascript高级程序设计>> js继承方式:实现继承,主要依靠原型链实现. 原型链:基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法. 这 ...

  9. 我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)(二)

    上一篇,多开方法,适用于一年前的版本 http://www.cnblogs.com/suanguade/p/5646776.html 前言: 一转眼一年过去了,日子越来越无聊了,于是,准备再玩一玩梦幻 ...

  10. linux redis安装及JAVA使用jedis

    一.redis安装 1.安装redis 将redis安装包放到指定目录下.并用tar -zxvf redis.*****.tar.gz解压2.想把redis安装到哪里,就在哪里创建redis文件夹. ...